智能算法挑战复赛初中组
(总共 4 道题)
1. 修复机器 的对话词库错误
【题 描述】
基于 智能技术的智能陪伴机器 的语 词库被 客的病毒感染了,感染 式是在单词中
变成了“heeello” 。空格 字符被替换为 度不固定的数字乱码,请修复它。
【输 格式】
输 字符串 (字符串中 空格) 。这 是被感染的字符串。
【输出格式】
输出 对应的正确字符串。
【样例输 】(测试数据不包含本样例)
Good24565morrrning
【样例输出】
Good morning
答案解析:
def fix_infected_string(s):
fixed_str = ''
prev_char = ''
for char in s:
if char.isdigit() or char.isspace():
continue
if char == prev_char:
continue
fixed_str += char
prev_char = char
return fixed_str
# 输 被感染的字符串
infected_string = input()
# 修复字符串并输出结果
fixed_string = fix_infected_string(infected_string)
print(fixed_string)
在这个示例中,我们定义了 个 fix_infected_string 函数来修复被感染的字符串。函
检查以下情况:
如果字符是数字或空格,则跳过该字符。
如果字符与前 个字符相同,则跳过该字符。这样可以找出被增加了两次的字 。
否则,将该字符添加到修复后的字符串中,并更新 prev_char 为当前字符。
然后,我们将输 的被感染的字符串传递给 fix_infected_string 函数进 修复,并打
请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功
2. 定制架 问题
【题 描述】
李莳花要做 个架 ,把她喜欢的摆件叠放起来,她的每个摆件的位置顺序是固 定的。这个
能超过这个宽度,每层架 的 度不 能低于最 的摆件的 度。假设,给出排列好的每个摆
要最少多 的架 。
【输 格式】
输 的第 有 2 个数字, 个是摆件的个数n,和架 的宽度 W。 以下摆件个数 n ,每
Hi。
【输出格式】
输出放置摆件架 的最低 度。
【样例输 】(测试数据不包含本样例)
5 5
2 1
1 2
1 3
2 3
2 2
【样例输出】
5
答案解析:
def minimum_shelf_height(n, W, items):
heights = [0] * (W + 1) # 记录每个宽度上摆放的最 度
for i in range(1, W + 1):
max_height = 0
for j in range(n):
if items[j][0] <= i:
max_height = max(max_height, items[j][1] + heights[i - items[j]
heights[i] = max_height
return heights[W]
# 输 摆件个数和架 宽度
n, W = map(int, input().split())
# 输 每个摆件的宽度和 度
items = []
for _ in range(n):
item_width, item_height = map(int, input().split())
items.append((item_width, item_height))
# 计算最低架 度并输出结果
min_height = minimum_shelf_height(n, W, items)
print(min_height)
在这个示例中,我们定义了 个 minimum_shelf_height 函数来计算放置摆件所需的最低架 度
个宽度上的最 度,并存储在 heights 列表中。
在主程序中,我们 先输 摆件的个数 n 和架 的宽度 W。然后,遍历输 每个摆件的宽度和 度,并
最后,我们调 minimum_shelf_height 函数计算最低架 度,并将结果打印出来作为输出。
请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据
3. 输出多进制数
【题 描述】
输 个 于 20 的正整数n,要求按从 到 的顺序输出所有的 n 位 m 进制数, 每个数占 。
【输 格式】
输 个 于 20 的正整数n,和 个 于 10 的正整数m。
【输出格式】
按从 到 的顺序输出所有的 n 位 m 进制数,每个数占 。
【样例输 】(测试数据不包含本样例)
3 2
【样例输出】
000
001
010
011
100
101
110
111
答案解析:
def print_base_numbers(n, m):
max_value = pow(m, n) - 1
for i in range(max_value + 1):
base_number = format(i, f'0{n}b')
print(base_number.replace(
# 输 n 和 m
n, m = map(int, input().split())
# 输出所有 n 位 m 进制数
print_base_numbers(n, m)
在这个示例中,我们定义了 个 print_base_numbers 函数来按顺序打印出所有的 n 位 m 进制数。
的 n 次 减 1。
然后,使 个循环从 0 到 max_value,将每个数字转换为 n 位 进制数,并 format 函数确保输
1,将所有的 1 替换为 0,得到所需的 m 进制数。最后,打印出每个 m 进制数。
在主程序中,我们输 n 和 m,并调 print_base_numbers 函数来输出所有的 n 位 m 进制数。
请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据
4. 在 AI 下棋程序中,计算猫抓 游戏的概率
【题 描述】
有这样 个游戏:在 个 n*n 的格 棋盘 ,n 是奇数;有两种棋 , 个是只 能横向移动的棋 猫,
在棋盘的正 中央,第 步 将进 上下左右的随机移动。棋 猫在从棋盘的中间 的最左边 向
左到右移动 步,第 步是猫位于 棋盘的中间 的最左边格 。请问:在猫移动到棋盘外 前,会有多
【输 格式】
输 个 于 1 的奇数n,表示棋盘的 。
【输出格式】
棋 猫抓到棋 的概率。( 数四舍五 保留4 位有效数字) 【样例输 】(测试数据不包含本样例)
3
【样例输出】
0.6667
答案解析:
def calculate_probability(n):
# 创建 个 为n的 维数组, 于保存每个格 上猫抓到 的概率
dp = [[0.0] * n for _ in range(n)]
# 初始化中 格 上猫抓到 的概率为1
dp[n // 2][n // 2] = 1.0
# 从中间 最左边开始向右移动
for col in range(n // 2 + 1, n):
# 每次移动的概率为0.5
move_prob = 0.5
for row in range(n):
# 计算当前格 上猫抓到 的概率
cat_prob = 0.0
if row > 0:
cat_prob += dp[row - 1][col - 1] * move_prob
cat_prob += dp[row][col - 1] * move_prob
if row < n - 1:
cat_prob += dp[row + 1][col - 1] * move_prob
dp[row][col] = cat_prob
# 统计最后 列格 上猫抓到 的概率
total_prob = sum(dp[row][n - 1] for row in range(n))
return round(total_prob, 4)
# 输 棋盘的
n = int(input())
# 计算猫抓到 的概率并输出结果
probability = calculate_probability(n)
print(probability)
在这个示例中,我们使 动态规划解决了问题。 先,我们创建 个 为 n 的 维数组 dp 来保存每
然后,我们从棋盘的中间 最左边开始向右移动。对于每个格 ,我们根据上 列格 上猫抓到 的
将其保存在 dp 数组中。
最后,我们统计最后 列格 上猫抓到 的概率,并将其四舍五 保留四位有效数字作为输出。
请注意,以上示例代码是使 Python 编写的。如果您希望在其他编程语 中实现相同的功能,请根据