1. 程式人生 > 實用技巧 >演算法題目--知識盲區記錄一下

演算法題目--知識盲區記錄一下

兔子生兔子

問題描述:一對兔子每個月生一對兔子,新兔子在第四個月開始生兔子,以此類推,在24個月之後有多少隻兔子

問題分析:第一個月(1對老+1對新),第二個月(1對老+2對新),第三個月(1對老+3對新),第四個月(1對老+(1對老+4對新)),第5個月(1對老+(1對老+(1對老6對新))。三個月之後每個月會有一對老兔子,而每個月會新增老兔子對數的新兔子

程式碼:

public class C {

    public static void main(String[] args) {
        for (int i = 1; i <= 24; i++) {
            System.out.println(rabbitQuantity(i));
        }
    }

    static int rabbitQuantity(int month) {
        // 將一個月大、二個月大、三個月大和成年兔子分別記錄
        int oneMonthRabbit = 0;
        int twoMonthRabbit = 0;
        int threeMonthRabbit = 0;
        int grownUpRabbit = 2;
        int totalRabbit = 0;

        // 每個月兔子長大,一個月大的兔子新增成年兔子的數量,全部兔子總數就是所有年齡兔子的和
        for (int startMonth = 0; startMonth < month; startMonth++) {
            if (threeMonthRabbit > 0) {
                grownUpRabbit += threeMonthRabbit;
                threeMonthRabbit = 0;
            }
            if (twoMonthRabbit > 0) {
                threeMonthRabbit += twoMonthRabbit;
                twoMonthRabbit = 0;
            }
            if (oneMonthRabbit > 0) {
                twoMonthRabbit += oneMonthRabbit;
                oneMonthRabbit = 0;
            }

            oneMonthRabbit += grownUpRabbit;
        }
//        System.out.println(oneMonthRabbit + " " + twoMonthRabbit + " " + threeMonthRabbit + " " + grownUpRabbit);

        totalRabbit = oneMonthRabbit + twoMonthRabbit + threeMonthRabbit + grownUpRabbit;

        return totalRabbit;
    }
}

注:如果間隔月份更大,可以使用陣列來儲存每個月的兔子數量而不是用變數直接定義