题目:海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子平均分为五份,多了一个,
这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,
又多了一个,它同样把多的一个扔入海中,拿走了一份
,第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
解题思路:我们根据我文章中提供的第一种方法来做分析解释。我们可以根据问题最终的求解结果进行假设,将假设的值依次代入到N只猴子的分桃子的方法中。
1.我们先假设有y只桃子,然后代入分桃子的算法中。
2.猴子去桃子的方法是:平均分成N分,结果会多一个。对应在程序中的判断形式是:y%N==1只要符合以上判断条件,我们就可以认为这次分桃子是成功的!最后,我们要注意到的是我们需要将N只猴子的分桃方法,都要符合以上算法,所以我们在本文源代码中提供了一个变量flag用来统计符合算法的次数。
3.按照题目意思,我们必须要所有的猴子都满足 y%N==1的算法,每次剩下的猴子的桃子个数是y=y-1-y//N
4.我们将假设的y值依次从假设的y=26这种情况依次代入程序算法,只要是第一次符合算法条件的y值,就是我们需要求的值。
源代码:
#假设原来有y个桃子 y=26 while True: flag=0 x=y for i in range(5): if x>1 and x%5==1: x=x-1-x//5 flag+=1 if flag==5: print(y) break else: y+=1 #第二种,借用数学方式才能理解,这里不做解释 # !/usr/bin/python # -*- coding: UTF-8 -*- if __name__ == '__main__': i = 0 j = 1 x = 0 while (i < 5): x = 4 * j for i in range(0, 5): if (x % 4 != 0): break else: i += 1 x = (x / 4) * 5 + 1 j += 1 print(x)
代码执行结果:
3121
3121.0
此题程序逻辑输出上,最后要注意的是符合怎样的条件后才是我们需要的y值。其它情况都是继续递增假设的y值,直到在代入后符合算法。