day41
分桃子
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子
凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
分析
老实讲,这个题前前后后也懵了我两天,终于也算弄出来了。最后发现用双循环可能比递归要好用点。废话不多说,上分析。
序号 | 桃子总数 | 减1后 | 猴子拿走 | 剩下的桃子 |
---|---|---|---|---|
1猴 | t1 | t1-1 | (t1-1)/5 | t2=4*(t1-1)/5 |
2猴 | t2 | t2-1 | (t2-1)/5 | t3=4*(t2-1)/5 |
3猴 | t3 | t3-1 | (t3-1)/5 | t4=4*(t3-1)/5 |
4猴 | t4 | t4-1 | (t4-1)/5 | t5=4*(t4-1)/5 |
5猴 | t5 | t5-1 | (t5-1)/5 | t末=4*(t5-1)/5 |
示例
序号 | 桃子总数 | 减1后 | 猴子拿走 | 剩下的桃子 |
---|---|---|---|---|
1猴 | 3121 | 3120 | 624 | 2496 |
2猴 | 2496 | 2495 | 499 | 1966 |
3猴 | 1966 | 1966 | 399 | 1596 |
4猴 | 1596 | 1596 | 319 | 1276 |
5猴 | 1276 | 1275 | 255 | 1020 |
注意:桃子数总是整数,不可能为分数,但具体第五个猴子拿多少也是不清楚的。所以,我们设第5个猴子拿到的个数从1-10000个开始尝试,其中条件其他猴子按照分桃子的算法得到的桃子也是整数。
设第5个猴子拿到的桃子数为g
第4个猴子拿到到的桃子数:
(5g+1)/4
第3个猴子拿到到的桃子数:
(5((5g+1)/4)+1)/4
第2个猴子拿到到的桃子数:
(5((5*((5g+1)/4)+1)/4)+1)/4
第1个猴子拿到到的桃子数:
(5((5*((5*((5*g+1)/4)+1)/4)+1)/4)+1)/4
编码实现
1.编码实现
flag=True
def fun(n,g):
global flag
t=0
if n<=1:
t=g
return t
else:
t=(1+5*fun(n-1,g))/4
if t