猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 ,
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个,
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?
答案为:1534个。
package algorithm;
public class Monkey {
public static void main(String[] args) {
/*
* 猴子吃桃问题:
*
* 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,
* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。
* 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?
*
* 答案为:1534个。
*/
calc();
worstCalc();
}
public static void calc() {
// 第一天吃掉一半 + 1个
// 依次类推十天
// 第十天发现剩 一个
int num = 1;// 桃子数量
for (int day = 9; day >= 1; day--) {
num = 2 * (num + 1);
}
System.out.println(num);
}
// 最差的做法
public static void worstCalc() {
int peach = 0; // 桃子
while (true) {
int tempPeach = ++ peach; // 1 2 3 ... 1000 ...
int day;
for (day = 1; day <= 9; day++) {
tempPeach = tempPeach / 2;
tempPeach --;
if( tempPeach <= 0 ) {
break;
}
}
if(day == 10 && tempPeach == 1) {
break;
}
}
System.out.println(peach);
}
}
附执行结果如下:
1534
1534