第1关:鸡兔同笼
任务描述
本关任务:编写一个解决鸡兔同笼问题的小程序。
相关知识
鸡兔同笼
大约在 1500 年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有 35 个头,从下面数,有 94 只脚,问笼中各有多少只鸡和兔?
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!
#参考下面的示例代码,从同一行读入两个数
a, b = input().split() # 将输入的以空格分隔的两个数命名为a和b
a, b = map(int,input().split(',')) # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b
编程要求
根据提示,在右侧编辑区补充代码,计算并输出鸡和兔子的个数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
输入为一行,以空格分隔的两个整数 h f,分别代表鸡兔的总头数和总脚数。
预期输出:
使用输入值进行计算,如有解,则输出:
有m只鸡,n只兔
如无解则输出
Data Error!
输入:
35 94
输出:
有23只鸡,12只兔
"""
在同一行内输入用空格分隔的两个整数,代表头和脚的数量,计算并输出笼中各有多少只鸡和兔,
如无解则输出“Data Error!”,函数无返回值。
输入:35 94
输出:有23 只鸡,12 只兔
输入:100 5
输出:Data Error!
"""
#读入以空格分隔的两个整数,表示头和脚的数量
##############Begin#####################
a, b = map(int,input().split())
def print_num(a,b):
if a<0 or b<0:
print("Data Error!")
return
x=b/2-a
y=a-x
if y - int(y) !=0 or x<0 or y<0:
print("Data Error!")
return
print(f"有{int(y)}只鸡,{int(x)}只兔")
return
print_num(int(a),int(b))
##############End#####################
第2关:物不知数
任务描述
本关任务:编写一个能计算物品个数数值的小程序。
相关知识
问题描述
“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。
意思是说有一些物品,不知道有多少个,如果一次3 个 3 个地数,还多出 2 个;一次5 个 5 个地数则多出 3 个;一次 7 个 7 个地数会多出 2 个。
现假设物品总数不超过 n (n<=1000),请编程计算满足条件的物品个数并输出。
编程要求
根据提示,在右侧编辑区补充代码,计算满足条件的物品个数并输出。
测试说明
平台会对你编写的代码进行测试:
输入格式:
输入为一个正整数 n,题目保证 0 < n <= 1000 。
输出格式:
输出不超过 n 且满足条件的物品个数 m,如果有多个解,则分行输出,每行一个解;如果无解则输出 No solution!。
输入:
10
输出:
No solution!
"""一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;
7个7个数也会多出2个。输入一个正整数,从小到大依次输出所有不超过输入数字
且满足条件的物品数量,有多个答案时每行输出一个。
例如输入:200
输出:
23
128
"""
n = int(input())
##############Begin#####################
found_solution = False
for x in range(n + 1):
if x % 3 == 2 and x % 5 == 3 and x % 7 == 2:
print(x)
found_solution = True
if not found_solution:
print("No solution!")
##############End#####################
第3关:二鼠打洞
任务描述
本关任务:编写二鼠打洞的计算小程序。
相关知识
二鼠打洞问题
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
请编程求此题的解,要求使用循环来完成,不允许使用幂运算。
编程要求
根据提示,在右侧编辑区补充代码,计算并输出它们几天可以打通,相逢时小鼠和大鼠各打了多少。
测试说明
平台会对你编写的代码进行测试:
输入格式
输入为 1 个整数 wall,代表墙的厚度,单位为尺。
输出格式
输出为两行
第一行输出 1 个整数,表示相遇时所需的天数。
第二行输出 2 个浮点数,依次为小鼠和大鼠打洞的距离,单位为尺,保留小数点后 1 位数字。
(提示:round(f,1)为浮点数 f 保留一位小数。)
示例 1
输入:
10
输出:
4
1.8 8.2
示例2
输入:
2
输出:
1
1 1
提示
最后一天可能不足一天便打通了
"""有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打洞一尺,小老鼠也是打洞一尺。
大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。计算并输出它们几天可以相逢,
相逢时各打了多少尺。
输入格式:输入1 个整数,代表墙的厚度,单位为尺
输出格式:
第一行输出1 个整数,表示相遇时所需的天数
第二行输出2 个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1 位数字。
"""
wall = int(input()) #墙壁的厚度
rat, mouse, day, time = 1, 1, 0, 1 #大鼠速度、小鼠速度、天数、当天工作时长(1表示工作一整天)
distance_of_rat, distance_of_mouse = 0, 0 #大鼠路程、小鼠的路程
while wall > 0:
################Begin#######################
if wall - mouse - rat < 0:
time = wall / (mouse + rat)
wall = wall - mouse - rat
distance_of_mouse = distance_of_mouse + time * mouse
distance_of_rat = distance_of_rat + time * rat
rat = rat * 2
mouse = mouse / 2
day = day + 1
################End#######################
print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1)) #使用round函数来保留小数点后一位
第4关:宝塔上的琉璃灯
任务描述
本关任务:编写一个宝塔上的琉璃灯的小程序。
相关知识
宝塔上的琉璃灯
问题描述:
有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有 765 盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
编程要求
编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。
测试说明
平台会对你编写的代码进行测试:
输入格式
本题没有输入。
输出格式
输出为 8 行
每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。
输出:
x
x
xx
xx
xx
xx
xxx
xxx
"""有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,
已知共有765 盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
输出为8行,每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。
"""
first = 3 #第一层琉璃灯
while True:
lantern = [] #列表来保存所有层的琉璃灯
m = first
for i in range(8): #一共8层
lantern.append(m) #将本层灯数目加入列表
m = m * 2 #下一层数目翻倍
#################Begin#############################
for count in lantern:
print(count)
break
#################End#############################
第5关:李白买酒
任务描述
本关任务:编写一个计算李白壶中有多少酒的小程序。
相关知识
李白买酒
诗仙李白,一生好酒。一天,他提着酒壶,从家里出来,酒壶中有酒若干,他边走边唱:
无事街上走,
提壶去买酒。
遇店加一倍,
见花喝一斗。
五遇店和花,
喝光壶中酒!
请你计算并输出壶中原有酒几斗?
(顺序交替遇到店和花)
小知识:
唐朝时,一斗酒的斗所采用的度量是小斗,也就是4斤,当时一斤取值范围大约在500多到600克左右,换算一下可知唐朝一斗酒的重量取值范围在2000克到2400克左右。
编程要求
编写一个李白买酒的小程序,要求使用循环来计算,不允许使用幂函数。
测试说明
输入格式:
本题没有输入。
输出格式:
一个浮点数 f,表示李白的酒壶原来有 f 斗酒。
输入输出示例
无。
"""大诗人李白,提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,
遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
"""
#解题思路:让李白按路线逆向走一遍
wine =float(0) #最后酒壶空了
################Begin#################
for i in range(5):
wine += 1 # 先加上他最后一次遇花喝掉的一斗酒
wine /= 2 # 然后回到上一次遇酒店酒量加倍
################End#################
print(wine) #原来有多少斗酒