问题描述:一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少只兔子。

问题分析:

1月 2月 3月 4月 5月 6月 。。。
1 1 1+1=2 2+1=3 3+1+1=5 5+1+1+1=8 。。。

如上面表格数据可以看出第三个月以后兔子的对数是前两个月兔子对数的和。

算法设计:用a,b分别表示每月前2个月和前1个月的兔子对数,第1和第2个月的兔子数作为初值都为1,第3个月的兔子数为c=a+b。求第4个月的兔子数时,将第4个月的前2个月和前1个月的兔子对数分别存储在a,b中,即a=b,b=c,构造循环不变式。

java代码如下:

package nbe.sense7.vinci;

public class RabbitNumber {

    /**
     * @param args
     * @author YoVinci
     * @since 6/5/2012
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a=1, b=1, c;
        for(int i=1; i<=12; i++){
            if(i<=2){
                System.out.println("" + i + "个月的兔子数:1");
            }else{
                c = a + b;
                System.out.println("" + i + "个月的兔子数:" + c);
                a = b;
                b = c;
            }
        }
    }

}

输出结果如下:

第1个月的兔子数:1
第2个月的兔子数:1
第3个月的兔子数:2
第4个月的兔子数:3
第5个月的兔子数:5
第6个月的兔子数:8
第7个月的兔子数:13
第8个月的兔子数:21
第9个月的兔子数:34
第10个月的兔子数:55
第11个月的兔子数:89
第12个月的兔子数:144