A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hg3093483 中级黑马   /  2013-3-28 21:58  /  2233 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hg3093483 于 2013-3-29 09:03 编辑

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
请用最简单的程序写出来。
class Demo {
        public static void main(String[] args) {
                int day = 9;
               
                int x2 = 1;//最后一天桃子数桃子数
                while (day > 0) {
                        x2 = (x2+1)*2;
                        day--;
                }
                System.out.println(x2);

        }
}
疯狂程序,的这个真精简啊!!

13 个回复

倒序浏览
  1. class  monkey
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int num=0;
  6.                
  7.                
  8.                 for (int x=10 ;x>0 ;x-- )
  9.                 {
  10.                         if(x==10)
  11.                                 num=1;
  12.                         else
  13.                         num=2*(num+1);
  14.                         System.out.println("第"+x+"天,\t剩余桃子:"+num);
  15.                 }
  16.         }
  17. }
复制代码
这是我的答案

未命名.jpg (22.27 KB, 下载次数: 43)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. import java.util.Scanner;
  2. /*
  3. * 需求:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  4.                         请用最简单的程序写出来。
  5.     求解: 使用for循环  一遍一遍的输入数据实验。最终得到的是4000.。   
  6. * */
  7. public class MonkeyEat {
  8.    public static void main(String args[])
  9.    {
  10.            while(true)
  11.            {
  12.            Scanner sc=new Scanner(System.in);
  13.            int number=Integer.parseInt(sc.next());
  14.            for(int i=0;i<10;i++)
  15.            {
  16.                    number=number/2-1;
  17.            }
  18.            System.out.println(number);
  19.    }
  20.    }
  21. }
复制代码
小弟愚笨,只能一遍一遍的输入数据实验。最终结果是  4000
回复 使用道具 举报
本帖最后由 _王涛 于 2013-3-28 22:37 编辑

public class Houzhi {
public static void main(String[] args) {
    int num=1;   
         System.out.println(num);
         for(int i=1;i<10;i++){
             num=(num+1)*2;
             System.out.println(num);                           
         }
         System.out.println("第一天共摘:"+num);
}
}
结果:
1
4
10
22
46
94
190
382
766
1534
第一天共摘:1534
回复 使用道具 举报
  1. import java.util.Scanner;
  2. /*
  3. * 需求:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  4.                         请用最简单的程序写出来。
  5.    
  6. * */
  7. public class MonkeyEat {
  8.    public static void main(String args[])
  9.    {
  10.            //定义一个变量number 用来储存猴子采摘的桃子数量。test变量用来计算。
  11.            int number=2,test;
  12.            //定义一个boolean变量来使得计算的结果正确时推出循环。
  13.            boolean TF=true;
  14.            //循环判断。
  15.            while(TF)
  16.            {
  17.            test=number;
  18.            for(int i=0;i<10;i++)
  19.            {
  20.                    test=test/2-1;
  21.            }
  22.            if(test==1)
  23.            {
  24.                    TF=false;
  25.            }
  26.            else
  27.            {
  28.                    number+=1;
  29.                  
  30.            }
  31.        }
  32.            System.out.println("猴子一共采摘了"+number+"颗桃子。");
  33.    }
  34. }
复制代码
这个是小弟做的另一个程序,可以自动显示桃子的数量。请各位指正。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

回复 使用道具 举报
/*
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天
早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
*/
class Demo {
        public static void main(String[] args) {
                int day = 9;
               
                int x2 = 1;//最后一天桃子数桃子数
                while (day > 0) {
                        x2 = (x2+1)*2;
                        day--;
                }
                System.out.println(x2);

        }
}
这是代码.能看懂吗,运行结果1534,不会的话随时联系我
回复 使用道具 举报
本帖最后由 蔡陶军 于 2013-3-28 23:03 编辑

楼主 这道题 我们首先字面分析

其实每天吃当天的一半多一个这样只进行了9天,而第10天只剩下一个,所以我们可以用for循环9次
  1. class Monkey
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1;
  6.                 for(int i=0;i<9;i++)
  7.                 {
  8.                         x=(x+1)*2;
  9.                 }
  10.                 System.out.println(x);
  11.                
  12.         }
  13. }
复制代码
结果是第一天共摘取了1534个桃子
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-28 23:16:44
8#
这位童鞋,为什么不把你的代码给大家分享一下呢?或者分享一下你的思路也可以啊,谢谢
回复 使用道具 举报
递归应该是最简单的吧。
  1. public static int sum(int n)             //输入天数
  2.         {
  3.                 if(n == 1)
  4.                         return 1;
  5.                 else
  6.                         return (sum(n-1)+1)*2;
  7.         }
复制代码
回复 使用道具 举报
本帖最后由 李慧声 于 2013-3-29 08:33 编辑

为啥不用递归呢?虽然大神们都不怎么用递归,但这道题明显是递归的思想啊,
答案应该是1534吧
  1.         
  2. public static int getSum(int dayTime)
  3. {
  4.         if(dayTime == 1)
  5.                 return 1;
  6.         else if(dayTime > 1)
  7.                return2 * (getSum(dayTime - 1) + 1);
  8.         else
  9.            return -1;
  10.                                        
  11.         }
复制代码
回复 使用道具 举报
李慧声 发表于 2013-3-28 23:50
为啥不用递归呢?虽然大神们都不怎么用递归,但这道题明显是递归的思想啊,
答案应该是1534吧, ...

因为递归我还没学到,还不会,囧!:Q
回复 使用道具 举报
许兵兵 发表于 2013-3-29 00:13
因为递归我还没学到,还不会,囧!

哦 没事没事 慢慢来 加油啊
回复 使用道具 举报
许兵兵 发表于 2013-3-28 22:12
这是我的答案

太有帮助了逻辑思维很强的说
回复 使用道具 举报
李慧声 发表于 2013-3-28 23:50
为啥不用递归呢?虽然大神们都不怎么用递归,但这道题明显是递归的思想啊,
答案应该是1534吧 ...

写的太好了,正好学习下递归
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马