/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
2020-03-11
统计出兔子总数
@param monthCount 第几个月
@return 兔子总数
*/
#include<iostream>
using namespace std;
//斐波那契数列函数
int getTotalCount(int monthCount)
{
    int F[monthCount + 1];
    F[0] = 1; //第一个月的兔子数,小兔子出生,然后开始长大。
    F[1] = 1; //第二个月的兔子数,小兔子继续长大,慢慢变成老兔子。
    F[2] = 2; //第三个月的兔子数,老兔子开始生小兔子了。后面出生的小兔子则与老兔子类似。
    for(int i = 3; i < monthCount; i++)
    {
        F[i] = F[i-1] + F[i-2];
    }
    //返回第 monthCount 个月的兔子总数
    return F[monthCount - 1]; 
}
//主函数,调用斐波那契数列函数的接口来得到每个月的兔子总数
int main()
{
    int monthCount;
    while(cin >> monthCount)
    {
        cout << getTotalCount(monthCount) << endl;
    }
    return 0;
}

/*
扩展:打印斐波那契数列(打印每个月的兔子总数)
*/
#include <iostream>
using namespace std;
//打印斐波那契数列,如超过100项,则需要一个可表示数值范围很大的数据类型,int型和long型貌似力不从心
unsigned long long Fibonacci(int num)
{  
    unsigned long long F[num + 1]; //初始化一个数组     
    F[0] = 1;
    F[1] = 1;
    F[2] = 2;
    for(int i = 3; i<= num; i++)
    {
        F[i] = F[i-1] + F[i-2];
    }        
    return F[num]; 
}
int main() 
{
    int n;
    while(cin >> n)
    {
        //打印斐波那契数列,是逐项打印。当然,也可以选择只打印第 n + 1 项。
        for(int i = 0; i <= n ; i++)
        {
            cout << "第" << i+1 << "项:" << Fibonacci(i) << endl;
        } 
    } 
    return 0;
}