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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙百鑫   /  2013-6-15 16:11  /  13226 人查看  /  241 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com;
  2. public class Monkey
  3. {        
  4.     public static void main(String args[])
  5.     {         
  6.             System.out.println("猴子第一天摘了"+new Monkey().peach(1)+"个桃子");  
  7.     }  
  8.     public int peach(int day)
  9.     {  
  10.         if(day==10)
  11.         {  
  12.             return 1;         
  13.         }
  14.         else{  
  15.             return (peach(day+1)+1)*2;//递归表达式
  16.             }      
  17.         }  
  18. }  
复制代码

猴子摘桃子.PNG (18.77 KB, 下载次数: 0)

猴子摘桃子.PNG

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 写上思路.加上注释会更好的哦~.

查看全部评分

回复 使用道具 举报
  1. package test;
  2. /*
  3. *猴子吃桃的问题:猴子第一天摘下来N个桃子,当天就吃了一半,但是还不过瘾,又多吃了一个,第二天早上又将
  4. 剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第十天早上的时候就发现剩下
  5. 一个桃子了.求第一天一共摘下了多少桃子呢?
  6. 10 9 8 7 6 5 4 3 2 1 ....
  7. 1 4 10 22 46 94 190 382 766 1534 ...
  8. */

  9. public class Test123 {
  10. public static void main(String[] args) {

  11. show(10,1); //传递天数 和剩余的桃子;
  12. int a=show1(10,1);
  13. System.out.println("第一天有"+a+"桃子");

  14. }
  15. public static void a(){
  16. int m = 1;
  17. for(int i=10;i>0;i--)
  18. m = 2*m + 2;
  19. System.out.println("小猴子共摘了"+m+"桃子");
  20. }

  21. public static void show(int a,int b){
  22. int taozi=b; //记录桃子的数量
  23. for (int x=a ;x>1;x--){ //循环天数 每次循环减少1次
  24. taozi=(taozi+1)*2;
  25. //桃子记录前一天的数量, 每次记录都是当天桃子数量+1后*2
  26. }
  27. System.out.println("第一天总共有:"+taozi+"个桃子");//打印输出


  28. }

  29. public static int show1(int y,int i){
  30. // int x=y; //记录天数 ,当天天数, 后来优化了发现可以不用了
  31. int taozi=i; //记录桃子每天桃子的数量
  32. if(y>1){ //设置判断语句 如果天数大于1,则继续调用自己,天数-1
  33. // taozi=(taozi+1)*2;
  34. y--;
  35. taozi=(show1(y,taozi)+1)*2;
  36. // System.out.println(taozi);
  37. }

  38. return taozi; //最后返回taozi 前一天桃子数;
  39. }

  40. }


复制代码
刚刚好像是多算了一天...

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 赞一个!

查看全部评分

回复 使用道具 举报
纠正下,刚才代码有个小错误,成题目是第十天吃完还剩1个了,其实是第十天没吃就剩1个了,我不知道怎么回事自己的帖子和回帖都看不到编辑
  1.         public static void main(String[] args) {
  2.                 int day=10;                 //猴子吃了十天;
  3.                 int number=getNumber(day);  //定义根据天数获取总数的函数
  4.                 System.out.println(number);
  5.         }

  6.         public static int getNumber(int day) {
  7.                                //判断是否最后一天,是则返回1
  8.                 if(day==1){   
  9.                         return 1;
  10.                         }
  11.                 return (getNumber(day-1)+1)*2;
  12.                                //调用递归
复制代码
结果是1534
回复 使用道具 举报
纠正下,刚才代码有个小错误,成题目是第十天吃完还剩1个了,其实是第十天没吃就剩1个了,我不知道怎么回事自己的帖子和回帖都看不到编辑
  1.         public static void main(String[] args) {
  2.                 int day=10;                 //猴子吃了十天;
  3.                 int number=getNumber(day);  //定义根据天数获取总数的函数
  4.                 System.out.println(number);
  5.         }

  6.         public static int getNumber(int day) {
  7.                                //判断是否最后一天,是则返回1
  8.                 if(day==1){   
  9.                         return 1;
  10.                         }
  11.                 return (getNumber(day-1)+1)*2;
  12.                                //调用递归
复制代码
结果是1534

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 恩.不多.如果在加上自己的思路就更好了.

查看全部评分

回复 使用道具 举报
  1. /*
  2.   假如每天有x个桃子,猴子吃了一半加一个,就是吃了x/2+1个,那么剩余x-(x/2+1)=x/2-1个;
  3. 这样,第二天有x/2-1个桃子供当天使用。
  4. 我们可以看出这么一个规律:今天的桃子个数+1再乘2等于昨天的桃子个数;用上面的表达式就是( x/2-1+1 )*2=x。
  5. 如此,只要知道了最后一天的桃子个数,知道了最后一天是第几天,就可以逆推出第一天总共多少个桃子了
  6. */
  7. public class Monkey
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 //逆向思维,输出总数
  12.                 System.out.println(sum(10));
  13.         }
  14.        
  15.         /**
  16.          * 根据天数计算第一天摘了多少桃子
  17.          * @param day 天数
  18.          * @return 桃子总数
  19.          */
  20.         public static int sum(int day)
  21.         {
  22.                 //若天数小于1,就提示报错
  23.                 if(day < 1)
  24.                 {
  25.                         throw new RuntimeException("day must than Zero");
  26.                 }
  27.                 //若天数为1时,则正好剩下1个桃子
  28.                 else if(day == 1)
  29.                 {
  30.                         return 1;
  31.                 }
  32.                 //其他则返回上一天吃的桃子数加1的2倍
  33.                 else
  34.                 {
  35.                         return (sum(day - 1) + 1) * 2;
  36.                 }
  37.         }
  38. }
复制代码

QQ截图20130615230331.png (5.01 KB, 下载次数: 0)

QQ截图20130615230331.png

评分

参与人数 1技术分 +3 收起 理由
孙百鑫 + 3 很给力!

查看全部评分

回复 使用道具 举报
  1. public class Monkey
  2. {        
  3.     public static void main(String args[])
  4.     {         
  5.             System.out.println("猴子第一天摘了"+new Monkey().peach(1)+"个桃子");  
  6.     }  
  7.     public int peach(int day)
  8.     {  
  9.         if(day==10)
  10.         {  
  11.             return 1;         
  12.         }
  13.         else{  
  14.             return (peach(day+1)+1)*2;//递归表达式
  15.             }      
  16.         }  
  17. }  
复制代码

猴子摘桃子.PNG (18.77 KB, 下载次数: 0)

猴子摘桃子.PNG

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 写上多加注释.在写上自己的思路会够好一点.

查看全部评分

回复 使用道具 举报

public class Text {
       

                public static void main(String[] args)
                {
                        diGui(11);//第11吃的只是一半+1;所以猴子摘的总数应该等于第11天吃的数;
                        System.out.println(diGui(11));//结果3070;
                }
                public static int diGui(int x){
               
                        if(x==1){
                                return 1;//通过逆向推理  第一天吃一个是程序的出口
                        }
                        else{
                                return diGui(x-1)*2+2; //往后的每天是第一天的两倍多两个;
                        }
                }
        }
回复 使用道具 举报
j816326 发表于 2013-6-15 22:30
看看题,加加油
发表于 5 分钟前 | 只看该作者







public class Text {
         

                public static void main(String[] args)
                {
                         diGui(11);//第11吃的只是一半+1;所以猴子摘的总数应该等于第11天吃的数;
                         System.out.println(diGui(11));//结果3070;
                 }
                 public static int diGui(int x){
                 
                        if(x==1){
                                 return 1;//通过逆向推理  第一天吃一个是程序的出口
                         }
                         else{
                                 return diGui(x-1)*2+2; //往后的每天是第一天的两倍多两个;
                         }
                 }
         }

没看清楚只能占一楼 答案发在回复里
回复 使用道具 举报
来看看题啊
回复 使用道具 举报
看看问题。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
虽然错过了,但是还是看看是什么题
回复 使用道具 举报

class Monkey
{
       public static void main(String[] args)
       {
              int day=10;
              int count=Count(day);
              System.out.println(count);

       }
       public  static int Count(int n)//递归方法
      {
             int co;
             if(n==1)
                    co=1;
             else
                    co=2*(Count(n-1)+1);/*前一天的桃子数目等于后一天数量加1乘2*/
                    return co;
       }
}

QQ图片20130615232604.jpg (4.36 KB, 下载次数: 0)

QQ图片20130615232604.jpg

评分

参与人数 1技术分 +3 收起 理由
孙百鑫 + 3 很给力!

查看全部评分

回复 使用道具 举报
思路:
第十天1个桃子
第九天:(1+1)*2
第八天:(第九天的+1)*2
----------------------------------
--------------------------------
以此类推
代码实现
  1. public class Count {

  2.           public static void main(String[]args){
  3.                 int count = 1;
  4.                 int day = 10;
  5.                 for(int i = 10;i > 0;i--){
  6.                         System.out.println("第"+day+"天,有桃子"+count+"颗");
  7.                         count = (count + 1) * 2;
  8.                     day--;                   
  9.                 }

  10.           }
  11. }          
复制代码
运行结果:

第10天,有桃子1颗
第9天,有桃子4颗
第8天,有桃子10颗
第7天,有桃子22颗
第6天,有桃子46颗
第5天,有桃子94颗
第4天,有桃子190颗
第3天,有桃子382颗
第2天,有桃子766颗
第1天,有桃子1534颗

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 简单明了,很不多.如果用递归,在多加注释的.

查看全部评分

回复 使用道具 举报
看看是什么
回复 使用道具 举报
public class TestNum{
public static void main(String[] args){
  int sum=1;    //统计桃子的总个数
  for(int i=10;i>0;i--){  //吃了十天应该循环十次
   sum=(sum+1)*2;  
  }
  System.out.println("sum="+sum); //输出结果
}
}

运行结果为sum=3070

点评

再走一边思路...  发表于 2013-6-16 09:54
回复 使用道具 举报
j816326 发表于 2013-6-15 23:22
没看清楚只能占一楼 答案发在回复里

答案在哪里呀?
回复 使用道具 举报
李道福 发表于 2013-6-16 01:38
public class TestNum{
public static void main(String[] args){
  int sum=1;    //统计桃子的总个数

运行结果.有点小错误哦~~~:)
回复 使用道具 举报
过来做题!!
回复 使用道具 举报
怎么看不到啊
回复 使用道具 举报
来看看是什么内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马