1 问题
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三只猴子、第四只猴子、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
2 方法
(1)问最少有多少只桃子,则岸上最后剩的桃子数目越小,原本岸上的桃子越少;
(2)通过问题可知,每一只猴子都会把桃子平均分五份,并且最后都多一个;受此启发,我们可以假设最后岸上还剩4x只桃子,利用递归方法求解;
(3)解决问题的数学方法找到了,接着需要我们将其转换成代码;首先定义函数,应用递归方法;最后再应用while循环。
代码清单 1
代码语言:javascript复制num=int(input("输入猴子的数目:"))
def fn(n):
if n == num:
return(4*x)
else:
return(fn(n 1)*5/4 1)
x=1
while 1:
count=0
for i in range(1,num):
if fn(i)%4 == 0 :
count=count 1
if count==num-1:
print("海滩上原来最少有%d个桃子" % int(fn(0)))
break
else:
x=x 1
3 结语
我们针对猴子分桃问题,首先提出解决问题的数学方法,再转换成Python问题,利用递归函数及其他本篇博客涉及到的方法,并通过代码成功实现证明这些方法是有效的。本文的方法还有许多不足以及考虑不周的地方,希望通过未来的学习和实践来不断改进。