要求说明:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。要求分别用for循环和while循环实现程序。
实现思路:
程序分析:采取逆向思维的方法,从后往前推断。
天 数 1 2 3 4 5 。。。10
桃子数 1 4 10 22 46 ?
所以桃子数计算方法:前一天桃子数*2+2
先分析问题:用逆向思维来思考它,根据题意“以后每天早上吃前天剩下的一半零一个”,则我们可以用逆向思维来推导它,即从第十天往前推。
已知第十天有一个,根据题意
第九天应该就是(1+1)*2=4个,
第八天应该就是(4+1)*2=10,
第七天应该就是(10+1)*2=22,
第六天应该就是(22+1)*2=46,依此类推,
直至第1天应该就是第2天(766+1)*=1534个桃子,
即猴子第一天摘了1534个桃子。
为了验证这个推导的正确性,你可以按正常逻辑来把它(即此时由前往后)推导,即由第一天1534个桃子,第二天就是1534/2-1=766个桃子,依此类推,直至第十天,那么猴子此时就会发现只剩一个。至此,我们由了推导的思想,再来编写的代码,就是小菜一碟的事情啦,实现的它方式无非就是那么两种,一种是简单的for循环,另一种是递归或者while循环。
实现代码:
for循环:
public class monkeysProblem { public static void main(String args[]){ int sum = 1,x = 1; for(x=1;sum<=9;sum++){ x=(x+1)*2; } System.out.println(x); } }
while循环:
public class monkeysProblem { public static void main(String args[]){ int day = 9; int x = 1; while (day>0) { x = (x+1)*2; day--; } System.out.println(x); } }