猴子吃桃问题网上的方法都是倒着算的,我想用正着算的方法实现,就是挨个数字试,但是程序写出来有问题,实在找不到原因,望高手帮忙解决,代码如下:
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);
}

}


}}

解决方案 »

  1.   

    public static long getCount(int day) {
    long count = 1;
    if (day != 1) {
    count = (getCount(day - 1) + 1) * 2;
    }
    return count;
    }
    用递归 方便
      

  2.   

    你的循环体里面的X的变量值一直被下x = x/2-1 最后变成1 导致进入无限循环 修改后的代码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);
    }
    }
    }
      

  3.   

    for (int x = 2; x < 2000; x = x + 2) {
    int temp = x;
    for (int i = 1; i <= 9; i++) {
    temp = temp / 2 - 1;
    if (temp < 0)
    break;
    }
    if (temp == 1) {
    System.out.println(x);
    break;
    }
    }这样就可以了……