要求说明:

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第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);
	}
}