日期:2014-05-20  浏览次数:20512 次

关于猴子吃桃问题
猴子吃桃问题网上的方法都是倒着算的,我想用正着算的方法实现,就是挨个数字试,但是程序写出来有问题,实在找不到原因,望高手帮忙解决,代码如下:
public class Monkey {

public static void main(String[] args) {
int i=0,j = 0;
int x;
for(x=1;x<2000;x++){/***************************************挨个数字试,从1开始,假设最大不超过2000*/
j=x;
for(i=1;i<=9;i++)
{
if(x%2==0)
{
x=x/2-1;/****************************************************每天剩下的桃子数*/
}
System.out.println(x);

}
if(x==1&&i==9)/*********************************************如果第九天吃完桃子还剩下一个,则相对应的那个数字就是桃子总数*/
{
System.out.println(j);
}

}


}

}

------解决方案--------------------
public static long getCount(int day) {
long count = 1;
if (day != 1) {
count = (getCount(day - 1) + 1) * 2;
}
return count;
}
用递归 方便
------解决方案--------------------
你的循环体里面的X的变量值一直被下x = x/2-1 最后变成1 导致进入无限循环 

修改后的代码

Java code
public static void main(String[] args) {
        int i = 0, j = 0;
        for (int x = 1; x < 2000; x++) {
            /*************************************** 挨个数字试,从1开始,假设最大不超过2000 */
            j = x;
            for (i = 1; i <= 9; i++) {
                if (j % 2 != 0) {
                    break;
                }
                j = j / 2 - 1;
                /**************************************************** 每天剩下的桃子数 */
                // System.out.println(j + ":" + i);
            }
            if (j == 1 && i == 10) {
                /********************************************* 如果第九天吃完桃子还剩下一个,则相对应的那个数字就是桃子总数 */
                System.out.println(x);
            }
        }
    }