猴子吃桃问题的思路整理

    技术2026-02-04  5

    猴子吃桃问题:

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

    Processed: 0.021, SQL: 9