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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

public class MonkeyPeach {
    /*逆推法
     * n1=1-->n2=(1+1)*2-->n3=(n1+1)*2...
     */
        public static void main(String[] args) {
                int days=1;
                int peachs=1;
                while(days<10){
                        peachs=(peachs+1)*2;
                        days++;
                }
                System.out.println(peachs);//结果1534
        }
}

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
题目是什么???
回复 使用道具 举报
想看看是什么样的题目呢
回复 使用道具 举报
  1. package test;

  2. import com.f.io.F;

  3. public class Test {

  4.         private static int day = 10;
  5.         private static int sum = 0;
  6.         public static void main(String[] args){
  7.                 getNum(1);//计算第十天剩下1个桃子,第一天摘了多少桃子
  8.                 System.out.println(sum);
  9.         }
  10.        
  11.         public static void getNum(int num){//假设第十天剩下了num个桃子
  12.                 day--;
  13.                 sum = (num+1)*2;//第九天剩下了sum个桃子
  14.                 if(day>1)//一直计算到第一天
  15.                         getNum(sum);
  16.         }
  17. }


  18. //输出结果为 1534
复制代码

计算桃子数.PNG (41.15 KB, 下载次数: 0)

计算桃子数.PNG

评分

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

查看全部评分

回复 使用道具 举报
我来试试
回复 使用道具 举报
走你 给力 给力
回复 使用道具 举报
我要技术分~~~~~
回复 使用道具 举报
  1. package it.cast.strem;
  2. /**  
  3. * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩  
  4. * 下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。  
  5. * 程序分析:采取逆向思维的方法,从后往前推断。  
  6. */   
  7. public class Monkey_Demo {   
  8. //定义一个main方法,jvm虚拟机保证程序的独立运行
  9. public static void main(String[] args) {   
  10. //定义一个一维数组
  11. int[] arr = new int[10];   
  12. //定义一个最大下标为1个桃子
  13. arr[9] = 1;   
  14. // 下面利用的是数组和循环将每天的桃子数量都求出来了   
  15. for (int i =arr.length - 1; i > 0; i--) {   
  16.         //按情况来说当天的都是次天的桃子的二倍还多二个
  17. arr[i - 1] = 2 * (arr[i] + 1);   
  18. }   
  19. //遍历数组
  20. for (int i = 0; i < arr.length; i++) {   
  21. System.out.println(arr[i]);   
  22. }   
  23. System.out.println("第一天的桃子数:"+getarr_Num(10, 1));   
  24. }   
  25.   
  26. // 利用递归的方法来求第一天的桃子数,day是天数,num是当天的桃子数,原理与上述类似
  27. public static int getarr_Num(int day, int arr_num) {   
  28. if (day == 1)   
  29. return arr_num;   
  30. else if (day < 1 || arr_num < 0)   
  31. return 0;   
  32. else   
  33. return getarr_Num(day - 1, (arr_num + 1) * 2);   
  34. }   

  35. }  

复制代码
运行结果:
1534
766
382
190
94
46
22
10
4
1
第一天的桃子数:1534

评分

参与人数 1技术分 +3 收起 理由
孙百鑫 + 3 有点复杂了.不过很给力!

查看全部评分

回复 使用道具 举报
李征 发表于 2013-6-16 16:31
class ChiTaoDemo
{
        public static void main(String[] args)

我多判断了一天,应该是<10,我写成了<=10,所以错了,还是读题不深呐,唉,不求技术分,只为锻炼,所以我也没再回复了
回复 使用道具 举报
  1. package com.itheima.bbs.peach;

  2. public class PeachTest {

  3. /**
  4. * 猴子吃桃的问题:猴子第一天摘下来N个桃子,当天就吃了一半,但是还不过瘾,又多吃了一个,第二天早上又将
  5. * 剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,
  6. * 到第十天早上的时候就发现剩下一个桃子了.求第一天一共摘下了多少桃子呢?
  7. */
  8. public static void main(String[] args) {
  9. //i代表第几天,m代表吃完剩下的桃子数目
  10. int i,m;
  11. //n代表第一天一共摘的桃子数目
  12. int n=1;
  13. //布尔变量,控制跳出循环
  14. boolean flag = false;
  15. while(true){
  16. n++;
  17. m=eatPeach(n);
  18. //由于第一天的桃子已经吃了(就是上一句),所以从第二天开始循环,直到第10天,如果桃子数目正好是1个,则当时的n就是正确结果
  19. for(i=2;i<11;i++){
  20. m=eatPeach(m);
  21. if(m==1){
  22. //如果吃后剩下的桃子数目是1个,还要判断是第几天
  23. if(i==10){
  24. flag = true;
  25. }else{
  26. //跳出for循环
  27. break;
  28. }
  29. }
  30. }
  31. if(flag){
  32. System.out.println("猴子第一天一共摘下了"+n+"桃子");
  33. //跳出while循环
  34. break;
  35. }
  36. }

  37. }
  38. //猴子每次吃后剩下m个
  39. public static int eatPeach(int n){
  40. int m;
  41. m = n/2-1;
  42. return m;
  43. }
  44. }

复制代码
运行结果:猴子第一天一共摘下了3070桃子
虽然晚了,但是还是发出来,请赐教。呵呵

点评

仔细看题哦~答案有点小错误.  发表于 2013-6-16 21:54
回复 使用道具 举报
/*
猜一猜猴子摘了多少桃子呢?


猴子吃桃的问题:猴子第一天摘下来N个桃子,当天就吃了一半,但是还不过瘾,又多吃了一个,第二天早上又将
剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第十天早上的时候就发现剩下
一个桃子了.求第一天一共摘下了多少桃子呢?
*/
class  TaoZi
{
        public static void main(String[] args)
        {
                int sum = 0;
                sum = sum(1);
                System.out.println("一共吃了"+sum+"个桃子");
        }
        public static int sum(int day)//递归算法
        {
                int count = 0;
                if(day == 10)
                count = 1;
                else
                        count = (sum(day+1)+1)*2;//今天的总量等于下一天的总量加上一个的和的2倍
                return count;
        }
}


答案是
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>g:

G:\>cd javapractice

G:\javaPractice>javac TaoZi.java

G:\javaPractice>java TaoZi
一共吃了1534个桃子

不好意思 本本不能上网  只能酱紫了--1

评分

参与人数 1技术分 +3 收起 理由
孙百鑫 + 3 恩.不错.

查看全部评分

回复 使用道具 举报
错过了唉?以后要多多关注一下:L
回复 使用道具 举报
我也想要,能看到题目么?
回复 使用道具 举报
wangpan 发表于 2013-6-16 21:38
运行结果:猴子第一天一共摘下了3070桃子
虽然晚了,但是还是发出来,请赐教。呵呵

我知道是哪里出问题了,因为最后一天没有吃就剩下1个了。所以我那个for循环应该改成:for(i=2;i<10;i++)并且在只剩下1个桃子的时候,应该用9判断
谢谢指正哦~

  1. <P>package com.itheima.bbs.peach;</P>
  2. <P>public class PeachTest {</P>
  3. <P> /**
  4.   * 猴子吃桃的问题:猴子第一天摘下来N个桃子,当天就吃了一半,但是还不过瘾,又多吃了一个,第二天早上又将
  5.   * 剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,
  6.   * 到第十天早上的时候就发现剩下一个桃子了.求第一天一共摘下了多少桃子呢?
  7.   */
  8. public static void main(String[] args) {
  9.   //i代表第几天,m代表吃完剩下的桃子数目
  10.   int i,m;
  11.   //n代表第一天一共摘的桃子数目
  12.   int n=1;
  13.   //布尔变量,控制跳出循环
  14.   boolean flag = false;
  15.   while(true){
  16.    n++;
  17.    m=eatPeach(n);
  18.    //由于第一天的桃子已经吃了(就是上一句),所以从第二天开始循环,直到第9天吃完,如果剩下的桃子数目正好是1个,则当时的n就是正确结果
  19.    for(i=2;i<10;i++){
  20.     m=eatPeach(m);
  21.     if(m==1){
  22.      //如果吃后剩下的桃子数目是1个,还要判断是第几天
  23.      if(i==9){
  24.       flag = true;
  25.      }else{
  26.       //跳出for循环
  27.       break;
  28.      }
  29.     }
  30.    }
  31.    if(flag){
  32.     System.out.println("猴子第一天一共摘下了"+n+"桃子");
  33.     //跳出while循环
  34.     break;
  35.    }
  36.   }
  37. /*  for(i=1;i<10;i++){
  38.    n=(n+1)*2;
  39.   }
  40.   System.out.println(n);*/
  41.   
  42. }
  43. //猴子每次吃后剩下m个
  44. public static int eatPeach(int n){
  45.    int m;
  46.    m = n/2-1;
  47.    return m;
  48. }
  49. }</P>
  50. <P>
  51. </P>
复制代码
结果为:猴子第一天一共摘下了1534桃子

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 程序就是不断的调试.加油!

查看全部评分

回复 使用道具 举报
我想看看噻

评分

参与人数 1技术分 +2 收起 理由
孙百鑫 + 2 虽然活动已经结束了.但是还是给你奖励下吧.

查看全部评分

回复 使用道具 举报
回复看下把!!!
回复 使用道具 举报

  1. public class Demo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.        System.out.println(tianShu(10));
  7.         }
  8.         public static int  tianShu(int day)
  9.         {
  10.                 int x;//记录桃子的数量
  11.                 if(day==1)
  12.                 {
  13.                         x=1;
  14.                 }else
  15.                 {
  16.                         //前一天的桃子数目等于后一天数量加1乘2
  17.                         x =2*(tianShu(day-1)+1);
  18.                 }
  19.                
  20.                 return x;
  21.                
  22.         }
  23. }
复制代码
结果是:1534
回复 使用道具 举报

谢谢了  ,技术分相当的缺啊:)
回复 使用道具 举报
希望我能会做
回复 使用道具 举报
  1. <div class="blockcode"><blockquote>class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 1;

  6.                 for (int y = 10;y>=1 ;y-- )
  7.                 {
  8.                         x = (x+1)*2;

  9.                         System.out.println("第"+y+"天"+"有"+x+"个桃子");
  10.                 }
  11.         }
  12. }
复制代码

点评

从新屡屡哈哈.思路是对的自己看看题目.答案有点小错误  发表于 2013-6-17 08:10
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马