黑马程序员技术交流社区

标题: 几只兔子的问题 [打印本页]

作者: 林铁柱    时间: 2012-2-1 17:31
标题: 几只兔子的问题
本帖最后由 林铁柱 于 2012-2-2 10:31 编辑

有一对新生兔子,从第三个月开始每一个月都生一对兔子,并且新生的兔子三个月后也会每个月都生一对兔子,问在不考虑兔子死亡的情况下,三年后有多少兔子?
作者: 张伟~    时间: 2012-2-1 19:26
本帖最后由 张伟~ 于 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-1 19:51
本帖最后由 马欢 于 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-1 20:30
本帖最后由 刘基军 于 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-2 13:31
刘基军 发表于 2012-2-1 20:30
假设第n个月的兔子数目为a,第n+1个月的兔子数目为b,那么第n+2个月的兔子数目应为:a+b。(因为第n个月的兔 ...

用递归的方法轻松解决,受教了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2