一个脑筋急转弯的程序问题,大家进来讨论一下!
之前考试时有这样一个问题:说,有一只猴子,它有一堆桃子,第一天吃了这堆桃子的一半加一个。
第二天吃了剩下的桃子的一半加一个......
以此类推,到20天时,它还剩余1个桃子。
问:这堆桃子共有多少个?
要求:输出这只猴子每天吃的桃子数。
欢迎大家给出解题思路、解题代码 --------------------编程问答--------------------
public class PeachEating
{
public static void main(String[] args)
{
int[] eating=new int[20];
for(int i=20;i>0;i--)
{
int number=getTheNumber(i); //倒着往前推。
eating[i-1]=(number/2)+1; //每天吃掉的放数组里。
}
System.out.println("------这堆桃共有 "+(2*(eating[0]-1)) +"个--------");
System.out.println("每天吃掉的情况是:");
for(int i=0;i<20;i++)
{
System.out.println("第 "+(i+1)+"\t天吃掉: "+eating[i]+"\t桃子");
}
}
public static int getTheNumber(int n)
{
if(n==20)
{
return 1; //第20天只能吃1个。
}
else
{
return 2*(getTheNumber(n+1)+1); //之前吃的数是下一天的数加1再乘2。
}
}
}
------这堆桃共有 1572862个--------
每天吃掉的情况是:
第 1 天吃掉: 786432 桃子
第 2 天吃掉: 393216 桃子
第 3 天吃掉: 196608 桃子
第 4 天吃掉: 98304 桃子
第 5 天吃掉: 49152 桃子
第 6 天吃掉: 24576 桃子
第 7 天吃掉: 12288 桃子
第 8 天吃掉: 6144 桃子
第 9 天吃掉: 3072 桃子
第 10 天吃掉: 1536 桃子
第 11 天吃掉: 768 桃子
第 12 天吃掉: 384 桃子
第 13 天吃掉: 192 桃子
第 14 天吃掉: 96 桃子
第 15 天吃掉: 48 桃子
第 16 天吃掉: 24 桃子
第 17 天吃掉: 12 桃子
第 18 天吃掉: 6 桃子
第 19 天吃掉: 3 桃子
第 20 天吃掉: 1 桃子
补充:Java , Java相关