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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?  

从第一个月起数,每月的兔子对数为:1,1,2,3,5,8,13,21,。。。

参考论坛上别的帖子,解法如下:
方法一:
public class Rabit
{
    public static void main(String[] args)
    {
    System.out.println("第1个月的兔子对数:    1");
    System.out.println("第2个月的兔子对数:    1");
    int f1 = 1, f2 = 1, f, M=24;//f2为每月兔子数,按对计,M是月份,大小可以随便设,但不能设无限大,否则就永远循环下去了
     for(int i=3; i<=M; i++)
     {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("第" + i +"个月的兔子对数: "+f2);
      }
}
}
这种解法就用到一个赋值的动作只需要相互赋值就可以了。
方法二:是建立一个数组如下:
public class huangJinShuLie  
{
        public static void main(String[] args)
        {
                //定义一个什么样的方法呢?需要返回值么
                //需要返回值int,参数1个?试试先。

                                int n=11;  //设置一个参数测试下这个方法。

                                System.out.println("第"+n+"个数对应的是"+suiJiShu(n));       

        }                        //方法中不能嵌套方法。
                public static int suiJiShu( int a)
                        //方法通过测试。
                        //这个方法编写跟上个求值一样所以我们复制下
                {
                                int[] A=new int[a];
                                A[0]=1;
                                A[1]=1;
                                int i=0;
                                for (i=2 ;i < a ;i++ )//先用一个循环给数组赋值
                                        {
                                                        A[i]=A[i-1] + A[i-2];
                                        }

                                        return A[a-1];
                }

}
        这是我改过的。这两种方法那个跟好呢?还有没有跟好的方法来解题???

5 个回复

倒序浏览
{:soso__6984081194057794752_1:}先自己顶下。。。
回复 使用道具 举报
呵呵,其实第二种个人认为比较好点。稍微再做下:
  1. package test;
  2. /*
  3. * 1对兔子出生3个月后每个月生1对
  4. * 小兔子3个月后又生1对
  5. * 假设兔子不死,每个月兔子对数
  6. *
  7. * */
  8. public class Rabbit {
  9.        
  10.         public static void main(String[] args) {
  11.                  int month = 12;
  12.                  Rabbit rabbit = new Rabbit();
  13.                  rabbit.numRabit(month);
  14.         }

  15.         private void numRabit(int month) {
  16.                 int [] temp = new int[month];
  17.                  temp[0]=1;
  18.                  temp[1]=1;
  19.                 System.out.println("第1个月兔子数"+temp[0]);
  20.                 System.out.println("第2个月兔子数"+temp[1]);
  21.                 for(int i=0;i<month-2;i++){
  22.                  temp[i+2]=temp[i+1]+temp[i];
  23.                  System.out.println("第"+(i+3)+"个月兔子数"+temp[i+2]);
  24.                        
  25.                 }
  26.                
  27.         }
  28.        
复制代码
回复 使用道具 举报
这跟农场有头牛,过几年生小牛是一样的。
第二个方法好些,但是我还是推荐用面向对象的思想去解决这样的问题。
你的方法需要先找到兔子数量的规律,要是这个规律不好找怎么办?
我推荐用面向对象的思想解决,把兔子变成一个类,提供生兔子的方法,农场变成一个类,提供计算兔子数量的方法,内部用个循环,根据兔子的年龄决定调不调用生兔子的方法。
你的也很好,我也学习了一下
回复 使用道具 举报
鲍亚坤 发表于 2012-3-28 12:02
呵呵,其实第二种个人认为比较好点。稍微再做下:

怎么把代码发的这么规范???
回复 使用道具 举报
耿世玉 发表于 2012-3-28 13:50
怎么把代码发的这么规范???

发帖的时候有个代码选项。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马