黑马程序员技术交流社区

标题: 猴子吃桃问题 [打印本页]

作者: 吃饭工作睡觉    时间: 2015-11-3 09:05
标题: 猴子吃桃问题
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
希望程序的逻辑关系写清楚,谢谢!


作者: 洛克先生EN    时间: 2015-11-3 09:05
public static void main(String[] args) {
        //倒推,最后也就是第10天剩一个
        int n=1;
        //从9天到第1天是同样的模式,所以用循环。
        for (int i = 9; i >= 1; i--) {
                //每天早上都吃了前一天剩下的一半零一个
                //比如 第二天的个数=(第一天的个数/2)-1,也就是 第一天的个数=(第二天的个数+1)*2
                //循环昨天=(今天*2)*1
                n=(n*2)+1;
        }
        //从9天到第1天循环完毕,即得到第1天的桃子个数
        System.out.println(n);
    }
作者: rookiefly    时间: 2015-11-3 09:39
  1. public class test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int sum=1,i;
  6.                 for(i=0;i<9;i++){
  7.                         sum=(sum+1)*2;
  8.                 }
  9.                 System.out.println("第一天共摘了 "+sum+" 个桃子.");

  10.         }
  11. }
复制代码

作者: xingjiyuan26    时间: 2015-11-3 11:39
注释很详细吧,不懂的话继续问哦
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 //倒推,最后也就是第10天剩一个
  4.                 int n=1;
  5.                 //从9天到第1天是同样的模式,所以用循环。
  6.                 for (int i = 9; i >= 1; i--) {
  7.                         //每天早上都吃了前一天剩下的一半零一个
  8.                         //比如 第二天的个数=(第一天的个数/2)-1,也就是 第一天的个数=(第二天的个数+1)*2
  9.                         //循环昨天=(今天+1)*2
  10.                         n=(n+1)*2;
  11.                 }
  12.                 //从9天到第1天循环完毕,即得到第1天的桃子个数
  13.                 System.out.println(n);
  14.         }
复制代码

作者: 大自然的搬运工    时间: 2015-11-3 20:10
俩人的程序完全一样,哈哈
作者: 菊花爆满山    时间: 2015-11-3 23:11
2楼的写的很详细了 想起了以前刚学C的时候也写过这题 好遥远了
作者: 秋色潇湘    时间: 2015-11-3 23:42
  1. /*
  2. 题意分析。
  3. 吃一半桃子,然后再吃一个,一共吃了9次,最后剩一个桃子。
  4. 逆序求值  x = (x+1)*2; 执行9次之后,可得到最初的桃子数
  5. */

  6. class PeachProblem {
  7.         public static void main(String[] args) {
  8.                 int num = 1;                              
  9.                 for (int i = 0; i < 9 ; i++ ) {            
  10.                         num = (num + 1)*2;                                          
  11.                 }
  12.                 System.out.println("第一天摘的桃子数为"+num);  //最后的结果为1534,话说这猴子第一天吃了767+1,这猴子是孙悟空吧。。
  13.         }
  14. }
复制代码

作者: 478883662    时间: 2015-11-4 09:14
顶写代码了几位层主。。。
作者: poxiao    时间: 2015-11-4 20:46
最后一天剩1个,则设第九天没吃之前的桃子数为x,则x - (1/2x + 1) = 1 =>x = 4,再推第八天,设第八天的桃子数为x,则x - (1/2x + 1) = 4 =>x = 10,...以此类推可得出前一天的桃子数是后一天桃子数加1再乘以2,所以函数应为:
void countPeach()
{
        int count = 1;//第10天的桃子数
        int i = 9, j = 0;

        for (i; i > 0; i--) // 已知第10天为1个,所以计算剩下9天的桃子数
        {
            count = (count + 1) * 2;
        }
        printf ("The number of peach is: %d \n", count);
}
作者: 雨来    时间: 2015-11-5 00:15
学习了不错
作者: 吃饭工作睡觉    时间: 2015-11-5 08:44
xingjiyuan26 发表于 2015-11-3 11:39
注释很详细吧,不懂的话继续问哦

谢谢你的解答!很受用!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2