java编程题:猴子吃桃
程序员文章站
2022-03-05 10:57:41
...
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一般,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
反向思考一下,从第十天开始,到第一天,每天吃桃子的个数是 ( num +1 )*2 其中num是后一天的 (num+1)*2,那么循环天数,循环九次,因为一到十,只经过了九天,
可以得到
public class Test {
public static void main(String[] args) {
int i;
int j =1;
for(i=9;i>=1;i--){
j = (j + 1)*2;
}
System.out.println(j);//1534
}
}
用while也可以做到
public class Test {
public static void main(String[] args) {
int i=9;
int j =1;
while(i>=1){
j = (j + 1)*2;
i--;
}
System.out.println(j);
}
}
还有一种思路是和题目思路一样,需要用到递归,调用自身方法
每次(+1)*2 后返回这个值再(+1)*2
public class Test {
/**
* 递归方法主体
*
* @param n
* @return
*/
public static Integer getTotal(Integer n) {
// 第十天只剩1个
if (n == 10) {
return 1;
}
// 每一次返回的都是(+1)*2,向内嵌套,变量永远是一个n,直到n成为一个定值
return (getTotal(n + 1) + 1) * 2;
}
public static void main(String[] args) {
// 调用方法,输入天数
// 1534个
Test.getTotal(1);
}
}