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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Imp_x 高级黑马   /  2014-8-21 22:03  /  2025 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Imp_x 于 2014-8-22 00:29 编辑

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
看着有点晕= =不知道编程该如何表达,求高人指点

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

15 个回复

倒序浏览
倒着算,楼下补充
回复 使用道具 举报

就是
第十天→第九天:(1+1)*2→4
第九天→第八天:(4+1)*2→5
.
.
.
这样倒着推么= =??代码如何表达啊....
回复 使用道具 举报
本帖最后由 笑脸迷人 于 2014-8-21 22:36 编辑

思路,其实就是一个求和
x(n):为第n天的桃子数,
x(n-1):第n-1天的桃子数
那么 就有2*(x(n-1)+1)=x(n)
  知道了x[1],求x[n]应该不难
  思路1:用for循环
  思路2:用递归~*/
public class MonkeyPeach {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(sum(10,1));
                System.out.println(sum_1(10,1));
        }
        public static int sum(int days,int endNum)//days为天数,endNum为第days天早上的桃子数
        {
                for(int i=1;i<days;i++)//逆向求解
                {
                        endNum=(endNum+1)<<1;
                }
                return endNum;
        }
        public static int sum_1(int days,int endNum)//递归方法:
        {
                if(days<=1)//如果是第一天,那么就将第一天的桃子数返回就好了
                        return endNum;
                days--;//
                endNum=(endNum+1)<<1;
                return sum_1(days,endNum);//求解昨天的桃子数
        }
}



评分

参与人数 1技术分 +1 收起 理由
追求卓越 + 1

查看全部评分

回复 使用道具 举报
class day3
{
        public static void main(String[] args)
        {
       
                int t =1;                         //定义一个变量t记录最后一天桃子是数量
                for (int i=2;i<=10 ;i++ )        //用for循环计算桃子是数量
                {
                        t=(1+t)*2;                   //用变量t记录每天桃子的数量
                System.out.println("第"+(11-i)+"天:"+t);//打印桃子每天的数量!
                }System.out.println("第一天猴子总共摘了"+t+"桃子");

        }
}

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
笑脸迷人 发表于 2014-8-21 22:34
思路,其实就是一个求和
x(n):为第n天的桃子数,
x(n-1):第n-1天的桃子数

  递归方面我还没学到,不过验证了一下你的结果是对的,不过不如用简单的for循环来计算,不知道提问者能不能明白你的意思,所以我用for循环又写了一个。希望你的代码以后能简洁明了,杀鸡不用宰牛刀。希望你学业有成,不要放弃学习
回复 使用道具 举报
Imp_x 高级黑马 2014-8-22 00:26:06
7#
笑脸迷人 发表于 2014-8-21 22:34
思路,其实就是一个求和
x(n):为第n天的桃子数,
x(n-1):第n-1天的桃子数

谢啦!很详细{:3_64:}
回复 使用道具 举报
Imp_x 高级黑马 2014-8-22 00:29:08
8#
追求卓越 发表于 2014-8-21 23:02
class day3
{
        public static void main(String[] args)
  1. 简短明了!不过建议版主下次代码可以的话= =在代码那里输入
  2. 这样的话,代码中有哪里不懂的,可以直接说第几行哪一句不懂,方便查看跟解答~~
  3. 哈哈
复制代码
回复 使用道具 举报
笑脸迷人 发表于 2014-8-21 22:34
思路,其实就是一个求和
x(n):为第n天的桃子数,
x(n-1):第n-1天的桃子数

学习下大神的算法~~~
回复 使用道具 举报
  1. public class Demo {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 int count = 1;
  5.                 for (int i = 0; i < 9; i++) {
  6.                         count = (count+1)*2;
  7.                 }
  8.                 System.out.println("第一天猴子载的桃子是:"+count+"个");
  9.         }
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报

呵呵嗯知道了,我也才学呢,
回复 使用道具 举报
mark,学习学习
回复 使用道具 举报
占星释 来自手机 中级黑马 2014-8-22 13:12:12
13#
public static void func(int i){return i>1?(func(i–1)+1)*2:1;}  用这个方法应该可以
回复 使用道具 举报
liusj 中级黑马 2014-8-22 14:33:34
14#
class Fangfan                //通过函数解决
{
        public static void main(String[] args)
        {
             String a=method(10);
                 System.out.println(a);
        }
        public static String method(int day){
             String s="桃子总数是";
                  int  x=1;
                 for (int i=2;i<=day ; i++)
             {
                       
                          x=2*(x+1);       
              s=s+x+" ";         
             }
         return s;
        }
}
回复 使用道具 举报
回复 使用道具 举报
        public int getAllPeach(int lastPeach,int day){// 使用for循环
                int peachTotal=1;
                for(int i=1;i<day;i++){
                        peachTotal=(peachTotal+1)*2;
                }
                return peachTotal;
        }
        public int getPeach(int lastPeach,int day){  //使用while循环
                int dayNow =1;
                int peachNow=1;
                while(dayNow<day){
                        peachNow =(peachNow+1)*2;
                        dayNow++;
                }
                return peachNow;
        }
        public int getPeachAll(int lastPeach,int day,int dayNow){//使用递归
                if(dayNow<=day){
                        System.out.println(dayNow+"天前,还有"+lastPeach+"个桃子");
                        dayNow++;
                        lastPeach =(lastPeach+1)*2;
                        getPeachAll(lastPeach,day,dayNow);
                }
                return lastPeach;
        }

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马