猴子与桃纠缠
传说很久很久以前,一只小猴子听妈妈的话,不远万里,爬山涉水专门跑到王母娘娘的蟠桃园里偷桃子吃,小猴子趁王母娘娘闭关修炼,偷了许多桃子,直到被蟠桃园的守卫发现,才恋恋不舍的逃走,小猴子逃跑的第一天,他看到兜里的美味桃子,贪吃了一半,然后忍不住又吃了一个;逃跑的第二天又吃了一半,再加上一个;后面每天都是这样吃;直到第十天,小猴子到家了,妈妈问:孩子,你摘了几个桃子呀?小猴子说:我摘了好多好多呢!小猴子一掏裤兜发现只有一个桃子了。妈妈说你撒谎呀?看我不打你屁屁!小猴子急了!妈妈一顿教育后,小猴子把所有的经过都一一坦白了。那么,小猴子究竟摘了多少个桃子呢?
解决计算问题
昂,用编程代码帮我们计算出来吧!
monkey-peach.cpp
#include <iostream>
using namespace std;
int main()
{
int x, y, n;
for(x = 1, n = 0; n < 9; y = (x + 1) * 2, x = y, n++);
cout<<"第一天共摘了 "<<x<<" 个桃子"<<endl;
return 0;
}
编程代码计算出的结果为 1535
通过while循环迭代计算出小猴子第一天摘的桃子数。
- 第一次循环:初始时,x=1,n=0,计算 y=(1+1)*2 = 4;然后更新x=4,n增加为1;
- 第二次循环:此时,x=4,n=1,计算 y=(4+1)*2 = 10;然后更新x=10,n增加为2;
- 第三次循环:此时,x=10,n=2,计算 y=(10+1)*2 = 22;然后更新x=22,n增加为3;
- 第四次循环:依次类推,每次循环都按照上诉规则计算新的x值。
这个循环内涵了迭代算法计算小猴子第一天摘的桃子数,从第十天只剩下一个桃子往后推理,倒着推理出第一天小猴子实际摘了1534个桃子。
为了帮助理解倒着推理,设x为小猴子第一天实际摘的桃子总数
第一天剩余的桃:A =(x ÷ 2 - 1)
第二天剩余的桃:B =(A ÷ 2 - 1)
第三天剩余的桃:C =(B ÷ 2 - 1)
...
第九天剩余的桃:I =(H ÷ 2 -1)
第十天剩余的桃:J =(I ÷ 2 -1)==1,那么可以推理出:I == 4,H ==10,依次计算
倒着推理出A ==1534
真相大白
妈妈听了小猴子的坦白局后,一阵天旋地转,原来呀,真相其实是 妈妈收到了王母娘娘的邀请函,请她去蟠桃园出席做客,品味天下一绝的蟠桃。然而家家有一本难念的经,猴子爸爸在外惹事了,需要猴子妈妈出面处理问题,实在抽不开身,猴子妈妈只好让小猴子拿着邀请函去参加王母娘娘的蟠桃宴。哪知,小猴子路上贪玩,邀请函搞丢了!没有邀请函,进不了南天门,小猴子不甘心吃不到心心念念的蟠桃,偷偷溜进了蟠桃园,这才闹出了乌龙事件!猴子妈妈赶紧带着小猴子向王母娘娘请罪,王母娘娘出了名的铁面无私,只见她冷漠的说:事情的经过我已知晓,无需赘言,念其品行不坏,且无恶意,死罪可免,然不加以惩戒,恐滋长他人效仿之心,故判偿还偷走的所有蟠桃,以儆效尤!哪路神仙可算出此猴共盗走了多少蟠桃?
众神一筹莫展,太上老君只会炼丹,菩提子手掐半天,千里眼看不明白,顺风耳还没听懂,神算子算到脑阔疼...此时,
编程君走上前来,言:禀王母娘娘,猴儿共盗走蟠桃果实共1534个。紧接着编程君道出缘由
众神听了,无不点头称赞。王母娘娘问:你母女俩可有异议?小猴妈妈拉着小猴子的手连连说道:娘娘赏罚分明。
只是可怜了小猴子,蟠桃风波即使过去了很久很久,小猴子估计还在惦记编程君的话:我的肚子能吃1534个桃子吗?