原来有1对兔子~~3个月后生一对兔子~并且之后每个月都生1对~新生出的兔子也是3个月之后生新兔子~也是3个月之后每月生1对~~~问20个月后有多少对兔子~~~
最好是能写一个可以按照所输入的 月份数 计算兔子  多几种方法最好 能借鉴下
自己想了挺久~~看了下人家用C写的~~~似乎是用递归~~但是刚学JAVA不知道怎么用JAVA表示出那个算法~~菜鸟啊~~~~

解决方案 »

  1.   

    递归也可以.
    用循环稍微容易懂一点
    我把我以前做的代码贴给你public int series(int number)
    {
        if(num==1)//如果数组长度为1,那么返回1
        {
            return 1;
        }
        else if(num<0)//如果数组长度小于0,输出错误,返回-1
        {
            System.out.println("error");
            return -1;
        }
        else
        {
            int[] a=new int[number];//定义数组
            a[0]=1;
            a[1]=1;
            for(int i=2;i<a.length;i++)
            {
                a[i]=a[i-1]+a[i-2];
            }
            return a[number-1];//返回数组最后一个元素
        }
    }
      

  2.   


    规律是这样么?三个月之后才生,我怎么觉得应该是
    1 1 1 2 3 4 6 9 13 19 28 41 60 
    如果是2个月之后,应该是Fibonacci序列,不知道我说的对不对
      

  3.   


    public class test {
        public static long rabbitCounter(int nMonthsLater)
        {
    if (nMonthsLater < 3) return 1;
            return rabbitCounter(nMonthsLater-1) + rabbitCounter(nMonthsLater - 3);
        }
        public static void main(String[] args){        System.out.println(rabbitCounter(20));
        }
    }
    结果 1278fibonacci序列的递归实现也很简单    public static long fibonacci(int n)
        {
    if (n< 2) return 1;
            return fibonacci(n-1) + fibonacci(n-2);
        }
      

  4.   

    数学方法:public class Test5 {
        
        public static void main(String[] args) {        
            long n = fibonacci(10);
            System.out.println(n);
        }
        
        public static long fibonacci(int month) {
            if(month < 1) {
                return 0;
            }
            double sqrt5 = Math.sqrt(5);
            double a = Math.pow((1 + sqrt5) / 2, month);
            double b = Math.pow((1 - sqrt5) / 2, month);
            double r = (sqrt5 / 5) * (a - b);
            return Math.round(r);
        }
    }
      

  5.   


    看完了斐波那契数列~~也看懂了~~火龙果大大的~代码了~~~非常感谢~~~但是这个题目好像是 3楼 的逝去日子大大 说的那样哦~~
    不过还是学了东西~~~以后碰到就会了  现在在火龙果 大大的基础上写了我想要的东西~~~问题解决了就是开心
    import java.util.*;
    public class Test5 {
        
        public static void main(String[] args) {        
            int i;
            String amswer;
            Scanner sc=new Scanner(System.in);
         do{
            System.out.println("请输入您所要计算的月份数");
         i=sc.nextInt();
            long n = fibonacci(i);
            System.out.println(n);
            System.out.println("是否继续计算:y/n");
            amswer=sc.next();
         }while (!amswer.equals("n"));
        }
        
        public static long fibonacci(int month) {
            if(month < 1) {
                return 0;
            }
            double sqrt5 = Math.sqrt(5);
            double a = Math.pow((1 + sqrt5) / 2, month);
            double b = Math.pow((1 - sqrt5) / 2, month);
            double r = (sqrt5 / 5) * (a - b);
            return Math.round(r);
            
          
       
        }
    }
      

  6.   

    public class Fibonacci{
    public static void main(String[]args){
       int x=1;
       int y=1;
       System.out.println("1月的兔子对数 "+x);
       for(int i=2;i<=20;i++)
      {
       
       System.out.println(i+"月的兔子对数"+y);
          y=x+y;
          x=y-x;
      }
     }
    }不会用类写出来的东西 现在才开始看关于类和对象的东西