海滩上有一堆桃子(讲解和代码)
题目:
海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分成5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第3、第4、第5只猴子都是这样做的,问海滩上原来最少有多少个桃子?
思路:
思路很简单,枚举法。
从1到大,逐一枚举,每一次要做的事就是检查这个桃子数是否符合题目给的要求(也就是让五只猴子逐一按照规则分配,直到能进行五次,那么第一次出现的就是我们要找的数)
代码:
def ff():
x = 0 #枚举的桃子树
while(True):
x += 1 #逐一递增
k = 0 #用来标志能完成几只猴子分配的任务
m = x #用于不改变x的值,使用m完成下面的分配任务
while(k<5): #当k=5时,表示已经进行了五只猴子分配,退出循环
if(m%5==1 and m//5>0): #检查这个桃子树是否满足分五堆还剩一个,以及每一堆的个数是否大于
m = (m//5)*4 #能满足上述条件则将剩下4堆的数量用于下个猴子分配
k += 1 #满足一次加一
else: #不满足表示这个桃子树不能满足五个猴子完成分配,则提前退出循环
break
if(k==5): #当循环是因为达到了5次分配而结束的,则表示找到这个最小的桃子数
print(x) #打印
break #并且最终退出循环
ff() #调用函数
运行结果:
3121