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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

      用什么方法,如何实现??

8 个回复

正序浏览
郑飞 高级黑马 2014-11-10 18:53:44
9#
嗯 想不出来 直接 写几个月就有规律了
回复 使用道具 举报
应该是递归吧
回复 使用道具 举报
Jeik 中级黑马 2014-11-10 14:23:47
7#
我看到楼下的哥们思路好像不对呀!这是典型的递归算法! 你自己写几个在纸上就能找到规律。1,2月为1,3月为2,4月为3,五月为5,6月为8
回复 使用道具 举报
public static int fun(int n){
回复 使用道具 举报
运行结果:
第1个月兔子总的对数为:1;长大的兔子的对数为:0
第2个月兔子总的对数为:1;长大的兔子的对数为:0
第3个月兔子总的对数为:1;长大的兔子的对数为:0
第4个月兔子总的对数为:2;长大的兔子的对数为:1
第5个月兔子总的对数为:3;长大的兔子的对数为:1
第6个月兔子总的对数为:4;长大的兔子的对数为:1
第7个月兔子总的对数为:6;长大的兔子的对数为:2
第8个月兔子总的对数为:9;长大的兔子的对数为:3
第9个月兔子总的对数为:13;长大的兔子的对数为:4
第10个月兔子总的对数为:19;长大的兔子的对数为:6
第11个月兔子总的对数为:28;长大的兔子的对数为:9
第12个月兔子总的对数为:41;长大的兔子的对数为:13
第13个月兔子总的对数为:60;长大的兔子的对数为:19
第14个月兔子总的对数为:88;长大的兔子的对数为:28
第15个月兔子总的对数为:129;长大的兔子的对数为:41
第16个月兔子总的对数为:189;长大的兔子的对数为:60
第17个月兔子总的对数为:277;长大的兔子的对数为:88
第18个月兔子总的对数为:406;长大的兔子的对数为:129
第19个月兔子总的对数为:595;长大的兔子的对数为:189
第20个月兔子总的对数为:872;长大的兔子的对数为:277
第21个月兔子总的对数为:1278;长大的兔子的对数为:406
第22个月兔子总的对数为:1873;长大的兔子的对数为:595
第23个月兔子总的对数为:2745;长大的兔子的对数为:872
第24个月兔子总的对数为:4023;长大的兔子的对数为:1278
回复 使用道具 举报

public class Test_28 {
        int t0,t1,t2,t3;
        public static void main(String[] args){
                for(int n=1;n<13;n++){
                        System.out.println("第"+n+"个月兔子总的对数为:"+coun(n)+";长大的兔子的对数为:"+cou3(n));
                }
        }

        public static int coun(int n) {
                return cou0(n)+cou1(n)+cou2(n)+cou3(n);
        }

        public static int cou0(int n) {        //第n个月生产的小兔子数量
                if(n==1){
                        return 1;
                }else{
                        return cou3(n);
                }
        }
        public static int cou1(int n) {        //第n个月的成长了1个月的小兔子数量
                if(n==1){
                        return 0;
                }else{
                        return cou0(n-1);
                }
        }
        public static int cou2(int n) {        //第n个月的成长了2个月的小兔子数量
                if(n==1){
                        return 0;
                }else{
                        return cou1(n-1);
                }
        }
        public static int cou3(int n) {        //第n个月的所有长大了的兔子数量
                if(n==1){
                        return 0;
                }else{
                        return cou3(n-1)+cou2(n-1);
                }
        }

}
回复 使用道具 举报
mudao 发表于 2014-11-10 12:40
纯算法题,三个月忽略掉。一对兔子,然后两对,再然后4对,8对,16对,32对。看明白?每个月都是前面一个月 ...

似乎明白了,非常感谢啊
回复 使用道具 举报
纯算法题,三个月忽略掉。一对兔子,然后两对,再然后4对,8对,16对,32对。看明白?每个月都是前面一个月的2倍。第N个月,就是第一个月的2的N次方对。抛开乱人眼的数字,直奔主题,很简单的。代码实现,就不用我写了吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马