package com;
import java.util.Vector;

/*
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个
 * 月都生一对兔子,小兔子长到第三个月后每个月又生
 * 一对兔子,兔子的寿命都是10个月,问每个月的兔子总数为多少?
*/

public class Test2{
    
//容器,存储存活的兔子对
    private Vector vector = new Vector();
    
//编号
    private int No = 0;
    
//构造函数
    public Test2()
    
{
        InnerClass ic 
= new InnerClass();
        ic.setNo(No
++);
        vector.add(ic);
        
    }

    
public void born()
    
{
        InnerClass ic 
= new InnerClass();
        ic.setNo(No
++);
        vector.add(ic);
    }

    
//内部类
    class InnerClass
    
{
        
private int no = 0;
        
private int life = 0;
        
public void setNo(int no)
        
{
            
this.no = no;
        }

        
public void setLife(int life)
        
{
            
this.life = life;
        }

        
public int getNo()
        
{
            
return this.no;
        }

        
public int getLife()
        
{
            
return this.life;
        }

    }

    
public int calculate()
    
{
        
//设置20个月内每个月的兔子数
        int Max = 20;
        
//初始为2只兔子
        int sum = 2;
        
while(Max > 0)
        
{
            
for(int i = 0; i < vector.size(); i++)
            
{
                InnerClass ic 
= (InnerClass)vector.elementAt(i);
                
int life = ic.getLife();
                life
++;
                
if(life < 3)
                
{
                    
//do nothing
                    ic.setLife(life);
                }

                
else//可以生小兔子了
                {
                    born();
                }

                
if(life >= 10)//必须死亡
                {
                    vector.removeElementAt(i);
                }

            }

            System.out.println(
""+(20 - Max) +"月兔子数量: "+vector.size()*2);
            Max
--;
        }

        
return 0;
    }

    
    
public static void main(String args[])
    
{
        Test2 t2 
= new Test2();
        t2.calculate();
    }

}