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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极£莜蓝 中级黑马   /  2014-5-30 23:42  /  3107 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

:P题目如下:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

5 个回复

倒序浏览
本帖最后由 yang1352546 于 2014-5-30 23:55 编辑

有一个规律就是     这个月的兔子数   =    上个月的兔子数 + 上上个月的兔子数;
public class Demo {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数:    1");
System.out.println("第2个月的兔子对数:    1");
int f1 = 1, f2 = 1, f, M=24;
     for(int i=3; i<=M; i++) {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("第" + i +"个月的兔子对数: "+f2);
         }
回复 使用道具 举报 0 1

class Demo
{
public static void main(String[] args)
{
  int sum = 0;
  //倒数第二个月
  int lastMonth = 1;
  //倒数第三个月
  int lastMonthBefore = 1;
  
  for(int i = 0;i<(n-2);i++)
  {
   sum = lastMonth + lastMonthBefore;
   lastMonthBefore = lastMonth;
   lastMonth = sum;
   System.out.println("本月总兔子数:"+sum+"  倒数第二个月的兔子数:"+lastMonth+"  倒数第三个月的兔子数:"+lastMonthBefore);
  }
  
  System.out.println(sum);
}
}
回复 使用道具 举报
下个月的兔子数量=上个月有生育能力兔子数量+当月兔子的数量,因为兔子从出生到具有生育能力要经历2个月后,所以数列的相邻3个元素为一个周期,第一个元素为上个月有生育能力兔子数量,第二个元素为当月兔子的数量,第3个元素为下个月的兔子数量。又因为第一个月和第二个月的兔子对数唯一,所以,可以用方法迭代来完成。
  1. import java.util.*;

  2. public class Test4 {

  3.         public static int RabbitNum(int n)
  4.         {
  5.                 //从第3项开始,每一项都等于前两项的和,所以return RabbitNum(n-1)+RabbitNum(n-2)
  6.                
  7.                 if(n>2)
  8.                 {
  9.                         return RabbitNum(n-1)+RabbitNum(n-2);
  10.                 }
  11.                 //单递归到n<2,返回1
  12.                                     
  13.                 return 1;
  14.                
  15.         }
  16.              

  17.         public static void main(String[] args)
  18.         {
  19.                 //定义变量n代表想要求得项数
  20.                 int n=0;
  21.                 System.out.println("输入你想求得项数:");
  22.                 //从键盘录入n
  23.                 Scanner input=new Scanner(System.in);
  24.                 n=input.nextInt();
  25.                
  26.                 System.out.println("结果是:"+RabbitNum(n));

  27.         }

  28. }
复制代码
回复 使用道具 举报 1 0
yang1352546 发表于 2014-5-30 23:50
有一个规律就是     这个月的兔子数   =    上个月的兔子数 + 上上个月的兔子数;
public class Demo {
pub ...

恩,谢谢了,恍然大悟.从第三个月开始就简单多了
回复 使用道具 举报
public static void main(String[] args) {
                 int a,b,c;//a表示当前月份的兔子.b代表前一个月的兔子数,.c代表前两个月的兔子;
                                a = 2; b=c=1;
                                for(int i=3;i <= 20;i++) {
                                        a=b+c;
                                        c=b;
                                        b=a;       
                                }
                                System.out.println("for兔子的个数:"+a);
       
                        System.out.println("函数兔子"+fun(20));
                        int arr[] = new int[21];
                        for(int  i=1;i<arr.length;i++) {
                                if(i==1||i==2)
                                arr[i]=1;
                                else
                                        arr[i]=arr[i-1]+arr[i-2];
                        }
                                System.out.println("数组兔子"+arr[20]);
        }
        public static int fun(int month) {
                               
                                if(month == 1|| month== 2)
                                        return  1;
                                else
                                        return fun(month-1)+fun(month-2);
        }
       
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马