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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林铁柱 黑马帝   /  2012-2-1 17:31  /  2172 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 林铁柱 于 2012-2-2 10:31 编辑

有一对新生兔子,从第三个月开始每一个月都生一对兔子,并且新生的兔子三个月后也会每个月都生一对兔子,问在不考虑兔子死亡的情况下,三年后有多少兔子?

4 个回复

倒序浏览
本帖最后由 张伟~ 于 2012-2-2 17:33 编辑

这题网上有额。。
以前做过个类似的你参考下
每个月的兔子总数为1,1,2,3,5,8...也就是说每一个兔子对数等于前面两个月之和。
class Pract1 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println("第1个月的兔子对数为:1");
                System.out.println("第2个月的兔子对数为:1");
                int month=36;
                int count1 = 1,count2=1,temp;
                for(int i=3;i<=month;i++)
                {
                        temp=count2;//先用一个临时变量把第2个月的数量记住
                     count2=count1+count2;//把前两个月的数量相加,再赋给count2,这样随着循环不断相加得到总数
                     count1=count;//第一个月的数量等于前面的第二个月,再应用到下一个循环。简单点说就是下一个循环的第一个月的兔子数量等于上一循环的第二个月的数量。
                       
                     System.out.println("第"+i+"个月的兔子为"+count2+"对");
                       
                }
        }
}

点评

最好写清思路步骤~加好注释~  发表于 2012-2-2 14:08

评分

参与人数 1黑马币 +5 收起 理由
荣凯旋 + 5 看清题目~修改代码给你技术分

查看全部评分

回复 使用道具 举报
本帖最后由 马欢 于 2012-2-1 19:54 编辑

class Tuzi {

                public static void main(String[] args){
                int sum=0;//用来表示兔子总数
                int        s=1;//最开始的第一对兔子
                int        m=0;//生下来的小兔子
                int l=0;
                int y=36;//三年共36个月
                int p=0,q=0;
                for(int t=1;t<=y;t++)
                                {
                p=s;
                q=m;
                l+=q;
                m=p;
                s=l-q;
                sum=l+m+s;
                }
                System.out.println("第三年你所拥有兔子的对数是:"+sum);
        }
               

}

点评

我想看你的分析思路,和步骤~注释  发表于 2012-2-2 14:09

评分

参与人数 1黑马币 +5 收起 理由
荣凯旋 + 5

查看全部评分

回复 使用道具 举报
本帖最后由 刘基军 于 2012-2-1 20:33 编辑

假设第n个月的兔子数目为a,第n+1个月的兔子数目为b,那么第n+2个月的兔子数目应为:a+b。(因为第n个月的兔子到第n+2个月,就可以全部生产了,而第n+1月的不行)
即:f(n) = f(n-1)+f(n-2) ,n>2

代码如下,供参考:
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {            
  5.                 int count = Integer.parseInt(args[0]);//键盘读入第n个月
  6.                
  7.                 //       
  8.                 int [] arr = new int[count+1];
  9.                 for(int i=1;i<=count;i++)
  10.                 {
  11.                         if(i<=2)
  12.                                 arr[i] = 1;
  13.                         else
  14.                                 arr[i] = arr[i-1]+arr[i-2];       
  15.                 }
  16.                 System.out.println(arr[count]);
  17.                
  18.                 //递归
  19.                 System.out.println(sumR(count));
  20.         }        
  21.        
  22.         public static int sumR(int month)
  23.         {
  24.                 if(month>2)
  25.                         return sumR(month-1) + sumR(month-2);       
  26.                 else
  27.                         return month==0?0:1;
  28.         }                        
  29. }
复制代码
回复 使用道具 举报
刘基军 发表于 2012-2-1 20:30
假设第n个月的兔子数目为a,第n+1个月的兔子数目为b,那么第n+2个月的兔子数目应为:a+b。(因为第n个月的兔 ...

用递归的方法轻松解决,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马