C++的问题,知道的大致能说一下思路嘛?谢谢^_^

编程求解母牛问题,若一头母牛,从出生起第四年开始每年生一头母牛,按此规律,第n年时有多少头母牛?

一个变量作为天数,一个变量作为牛的头数,一开始一头牛,4年生一头母牛的话,就是第4年是2,之后每次到4的倍数,现有牛就会翻倍,因为过了4年
所以得出
int niu = 1;
for(int i = 4 ; i != 天数; ++i){//多少天的循环
if(i%4==0)niu+=niu;
}//循环结束后,niu就是所有的牛


int niu(int n) {
        int niu = 1;
        for (int i = 0; i != n; ++i) {// 多少天的循环
            if (i % 4 == 0)
                niu += niu;
        }// 循环结束后,niu就是所有的牛
        return niu;
    }


第一年有多少头母牛?

类似于斐波那契数列问题http://blog.sina.com.cn/s/blog_a2a6827e01013sbn.html看一下这个

从出生起第四年开始每年生一头母牛,也就是牛在第一年出生后,第四年,第五年……每年都会生小牛。

参考斐波那契兔子问题,可以知道 通项公式为 T(n)=T(n-1)+T(n-3)

公式可以这么理解, 第n年的牛数量等于去年牛的数量加上今天新生小牛的数量,去年牛的数量是 T(n-1) xi

因为第四年后的牛都会生小牛,所以第n年的小牛数目就是 T(n-3)年的牛数。那时候的牛到了第n年都会生小牛,n-1,n-2年新出生的小牛在第n年还不会生小牛。

public int number(int n){
if(n<=0)
return 0;
if(n<4)
return 1;
return number(n-1)+number(n-3);
}

典型的斐波那契数列,让你掌握迭代和递归的知识,你可以扩展学一下动态规划和汉诺塔问题,解决的思想差不多

程序输入年数n即可,vector中存储的是所有牛的年龄,从大到小,看函数输出结果一目了然就懂了

 #include <vector>
#include <iostream>
using namespace std;

void OneYearPass(vector<int>& v)
{
    int n = v.size();
    for(int i=0;i<n;i++)
    {
        if(v[i]>=4) 
        {
            v.push_back(1);
        }
        v[i]+=1;
    }
    for(int i=0;i<v.size();i++)
    {
        cout<<v[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    vector<int> v;
    v.push_back(1);
    int n;
    cin>>n;
    cout<<"第1年:"<<endl<<1<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<"第"<<i+2<<"年:"<<endl;
        OneYearPass(v);
    }
    return 0;
}