资源简介 智能算法挑战复赛 学组(总共 4 道题)1. 捡 头【题 描述】 强在河边捡了 2 块漂亮的 头,他想再捡两块 头,让这 4 块 头的质量正好 为 30 ,并块 头的质量之间的数字,请编程 输出第 3 块和第 4 块 头的质量。注:每个 头的重量都输出 0 0。【输 格式】输 2 个数,数与数之间以空格间隔,表示 2 块 头的质量。【输出格式】输出表示第 3、4 块 头的质量的所有可能结果,每块 头质量的数字 空格隔 开。多组结分 输出。【样例输 】(测试数据不包含本样例)1 11【样例输出】8 109 9答案解析:我们可以使 两层循环来解决捡 头的问题。外层循环遍历第三块 头的质量,内层循环遍下条件:新捡的两块 头的质量要介于前两块 头的质量之间。四块 头的质量之和等于30。def find_stones_weight(m1, m2):results = [] # 保存所有可能的结果for m3 in range(m1 + 1, m2):for m4 in range(m3, m2 + 1):if m1 + m2 + m3 + m4 == 30:results.append((m3, m4))return results# 输 已有的两块 头的质量m1, m2 = map(int, input().split())# 查找可能的新 头质量并输出结果possible_weights = find_stones_weight(m1, m2)for weight in possible_weights:print(weight[0], weight[1])在这个示例中,我们定义了 个 find_stones_weight 函数来查找可能的新 头的质量。头和第四块 头的质量。如果满 条件,将它们存储在 results 列表中。在主程序中,我们输 已有的两块 头的质量。然后,调 find_stones_weight 函数查出。请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功2. 判断数字出现了 次【题 描述】给定 个正整数n,判断从 1 到这个数本身的所有数中, 共出现了多少次数字 k。【输 格式】输 共 1 ,包括 个正整数 n 和 个正整数 k。(0输出共 1 , 个整数,表示 1 到 n 之间的所有数 (包括n), 共出现了 次k。 【样例输13 3【样例输出】2答案解析:def count_occurrences(n, k):count = 0for num in range(1, n + 1):# 将数字转换为字符串,以便进 字符 较num_str = str(num)# 统计数字 k 在当前数字中出现的次数digit_count = num_str.count(str(k))# 累加出现次数count += digit_countreturn count# 输 正整数 n 和 kn, k = map(int, input().split())# 计算从 1 到 n 之间 共出现了 次数字 koccurrences = count_occurrences(n, k)print(occurrences)在这个示例中,我们定义了 个 count_occurrences 函数来计算从 1 到 n 之间 共出现了 次数字数字,在每个数字中统计数字 k 出现的次数,并累加到 count 变量中。在主程序中,我们输 正整数 n 和 k,并调 count_occurrences 函数来计算结果,并将其输出。请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据3. 滑雪板打包问题【题 描述】 家新开业的滑雪场,需要采购不同规格的滑雪板,每个滑雪板的 度是不固定 的,现在需要把排列好每次快递的总重 量是有限制的,不能超过重量 G。只要每次打包的重量不超过 G,多个滑雪板可以摞个 板进 固定。假设,给出排列好的 每个滑雪板的重量 Gi ,和 度 Li ,请计算需要最少多 的 板【输 格式】输 的第 有两个数字, 个是滑雪板的个数, 个是包裹总重量。 以下滑雪板个数 ,每 的第 【输出格式】输出需要最少的 板的总 度。注:每次打包需要 2 个 板。【样例输 】(测试数据不包含本样例)5 52 11 21 32 32 2【样例输出】10代码解析:def calculate_minimum_length(num_boards, max_weight, boards):# 按照滑雪板的 度从 到 排序sorted_boards = sorted(boards, key=lambda x: x[1], reverse=True)total_length = 0 # 总 板 度current_weight = 0 # 当前打包的重量for i in range(num_boards):weight = sorted_boards[i][0]length = sorted_boards[i][1]# 如果当前打包的重量超过最 限制,需要新的 板进 打包if current_weight + weight > max_weight:total_length += length * 2current_weight = weightelse:current_weight += weight# 加上最后 次打包的 板 度total_length += sorted_boards[-1][1] * 2return total_length# 输 滑雪板的个数和包裹总重量num_boards, max_weight = map(int, input().split())boards = []for _ in range(num_boards):weight, length = map(int, input().split())boards.append((weight, length))# 计算需要最少的 板的总 度并输出结果minimum_length = calculate_minimum_length(num_boards, max_weight, boards)print(minimum_length)在这个示例中,我们定义了 个 calculate_minimum_length 函数来计算需要最少的 板的总 度 排序。然后,我们遍历每个滑雪板,并根据当前打包的重量判断是否需要新的 板进 打包。如果超过最 限上,并更新当前打包的重量。如果没有超过最 限制,我们只需要更新当前打包的重量。最后,我们加上最后 次打包的 板 度,并输出结果作为最少的 板总 度。请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据4. 统计考试成绩【题 描述】期末考试结束了, 师要统计班 学 的考试成绩分布,已知每个同学的考试 成绩为在 0 到 100 分之成绩,计算出在 平均成绩 (成绩平均值向下取整) 之上的 ( 于等于平均成绩) 和在平均成绩之下 的 ( 【输 格式】第 n 为学 成绩个数,0第 ,由空格隔开的每个同学的成绩,为 1 到 100 间的整数。 【输出格式】两个整数,由空格隔开,为平均分以上 数和平均分以下 数。 【样例输 】(测试数据不包含本样例12100 80 93 66 73 50 96 100 84 47 97 71【样例输出】答案解析:要解决这个问题,我们可以按照以下步骤进 :1. 先,获取学 成绩的个数 n。2. 然后,输 每个同学的成绩,并计算总分。3. 计算平均分(向下取整)。4. 遍历每个同学的成绩,统计平均分以上和平均分以下的 数。5. 输出平均分以上和平均分以下的 数。下 是 个解决该问题的 Python 代码示例:import math# 输 学 成绩个数n = int(input())# 输 每个同学的成绩,并计算总分scores = list(map(int, input().split()))total_score = sum(scores)# 计算平均分(向下取整)average_score = math.floor(total_score / n)# 统计平均分以上和平均分以下的 数above_average_count = 0below_average_count = 0for score in scores:if score >= average_score:above_average_count += 1else:below_average_count += 1# 输出平均分以上和平均分以下的 数print(above_average_count, below_average_count)在这个示例中,我们 先输 学 成绩的个数 n,并将每个同学的成绩存储在列表 scores 中。然后,接下来,我们计算平均分(向下取整),使 math.floor 函数来实现向下取整。然后,我们遍历每个同学的成绩,统计平均分以上和平均分以下的 数,并将结果存储在变量 above_average_count 和 below_average_count 中。最后,我们输出平均分以上和平均分以下的 数。请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据 展开更多...... 收起↑ 资源预览