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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵震 高级黑马   /  2013-3-30 20:09  /  1589 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qwe8234118 于 2013-3-30 21:24 编辑

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

求这个问题的思路 不要太高深的 我刚看到面向对象

我想了半天没想明白

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 鼓励一下,加油!继续努力!

查看全部评分

13 个回复

倒序浏览
我在C语言还是C++中模糊的记得看过这样的题
回复 使用道具 举报
#include "stdio.h"
main()
{
  long f1,f2;
  int i;
  f1=f2=1;
  for(i=1;i<=20;i++)
  {
    printf("%12ld %12ld",f1,f2);
    if(i%2==0) printf("\n"); /*控制输出,每行四个*/
       f1=f1+f2; /*前两个月加起来赋值给第三个月*/
       f2=f1+f2; /*前两个月加起来赋值给第三个月*/
  }
}
回复 使用道具 举报
回复 使用道具 举报
楼上的NB,学习了。
回复 使用道具 举报
黄小贝 发表于 2013-3-30 20:18
http://bbs.itheima.com/forum.php?mod=viewthread&tid=28225&highlight=

帅哥 你能把你的代码解释一下吗 我看不懂啊。。。。。貌似没学到  

谢谢
回复 使用道具 举报
哥们...以后发帖的时候叫上我...我来捞技术分...这个兔子问题... F[n] = F[n-1 ]+F[n-2] ;就是这么个套路
回复 使用道具 举报
邵震 高级黑马 2013-3-30 21:07:05
8#
似水像火 发表于 2013-3-30 20:52
哥们...以后发帖的时候叫上我...我来捞技术分...这个兔子问题... F[n] = F[n-1 ]+F[n-2] ;就是这么个套路 ...

我累个去 你这个我没看懂啊
回复 使用道具 举报
万蕾 中级黑马 2013-3-30 21:07:15
9#
涉及知识:
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。
注:此时a1=1,a2=1,an=a(n-1)+a(n-2)(n>=3,n∈N*)
class Test_1
{        
       
                public static void main(String[] args)
                {
                           DuiShu n=new DuiShu(2);

                            n.getShow();
                }

       
}

class DuiShu
{
        private int month;
        private int a1=1;
        private int a2=1;
        private int a;

        DuiShu(int month)
        {
                this.month=month;
        }

        public void getShow()
        {
                if(month>0&&month<3)
                {
                        switch(month)
                        {
                                case 2:
                                        System.out.println("第"+(month-1)+"个月兔子的对数为:1");                               

                                case 1:
                                        System.out.println("第"+month+"个月兔子的对数为:1");
                        }
                       
                }
                else if(month>=3)
                {
                        System.out.println("第1个月兔子的对数为:1");
                        System.out.println("第2个月兔子的对数为:1");
                        for(int i=3;i<=month;i++)
                        {
                                a=a2;
                                a2=a2+a1;
                                a1=a;
                                System.out.println("第"+i+"个月兔子的对数为:"+a2);
                        }
                }
                else
                {
                        throw new RuntimeException(toString());//这是抛出一个异常,简单写了,毕老师异常那一课会将到。
                }
               
        }
       
}
自己写的,毕老师讲课中都有的,看了应该就会了。



评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

回复 使用道具 举报
qwe8234118 发表于 2013-3-30 21:07
我累个去 你这个我没看懂啊

凡是想兔子这样的问题,就如裴波那契数列一样...后一个结果是有前面的结果得出来。类似于找规律
回复 使用道具 举报
扫噶 懂了  谢谢了
回复 使用道具 举报
我用递归思想,面向对象写个一个年看看能看懂不?
  1. class  add
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 tuzi tt = new tuzi(8);
  6.                 int add =  tt.addtu();//兔子自己数了一下总共下了几对
  7.                 System.out.println("有兔子"+(add+1)+"对");//别忘了最开始的兔子
  8.         }
  9. }
  10. class tuzi//封装兔子对象
  11. {
  12.         int age = 1;//兔子有年龄月数生下来当月就算一个月
  13.         tuzi(int age)
  14.         {
  15.           this.age = age;
  16.         }
  17.         public int addtu()//数一下总共下了几对兔
  18.         {
  19.                 int num = 0;
  20.                 int x=0;
  21.                    for (x= age;x>2 ;x-- )//年龄大于2个月的会下小兔
  22.           {
  23.                         tuzi d= new tuzi(age-x+1);//age月下了一对兔年龄为(age-x+1)的兔子。
  24.                    num++;//下一对数量加1
  25.                   
  26.                   num =  num + d.addtu();//把自己孩子下的也加上去
  27.                
  28.           }
  29.           return num;
  30.         }

  31. }
复制代码
回复 使用道具 举报
qwe8234118 发表于 2013-3-30 20:44
帅哥 你能把你的代码解释一下吗 我看不懂啊。。。。。貌似没学到  

谢谢 ...





方便调试,完整代码如下:
  1. package day1;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. /**
  5. * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  6. * @author yellowbaby
  7. */
  8. public class Test {
  9.         
  10.         public static void main(String[] args) {
  11.                
  12.                 List<Rabbit> rabbits = new ArrayList<Rabbit>();//兔子窝
  13.                
  14.                 rabbits.add(new Rabbit());//祖先一对兔
  15.                
  16.                 for(int month = 1; month <= 12;month++){//咱先看一年内兔子的数量变化

  17.                         for (int i = 0; i < rabbits.size(); i++) {                        
  18.                                 rabbits.get(i).addMonth(rabbits);
  19.                         }
  20.                         System.out.println("第" + month + "个月兔子的数量为" + rabbits.size() + "对~");
  21.                 }
  22.                
  23.         }
  24. }
复制代码
  1. package day1;

  2. import java.util.List;

  3. /**
  4. * 表示一对兔子
  5. */
  6. public class Rabbit {

  7.         /**
  8.          * 兔子存活的月数
  9.          */
  10.         private int month = 0;

  11.         /**
  12.          * 兔子的岁数变大了一个月~如果到了三个月~成年兔你懂的~
  13.          */
  14.         public void addMonth(List<Rabbit> rabbits) {
  15.                 month ++;
  16.                 if(month >= 3){
  17.                         rabbits.add(new Rabbit());
  18.                 }
  19.         }
  20.         
  21. }
复制代码
PS: 用面向对象的思想非常容易理解,虽然看起来稍微复杂了一点~


评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这题是一个数学问题,斐波那契数列。

楼主可以先了解原理,对编写有帮助。

http://baike.baidu.com/view/816.htm
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马