解题思路:看清楚题目就能明白这是一个魔改版的兔子(Fibonacci)数列,我愿称之为母牛数列

我们不去深究到底是如何如何魔改的(因为太懒了不想去想),只需要要知道,母球们发育周期为四年,而

第N年的母牛总数cnt =  成熟母牛数record[3].num+第三年成长期母牛数record[2].num+ 第二年成长期母牛数record[1].num + 新出生母牛数record[0].num

                                     第三年成长期母牛数record[2].num = 上一年第二年成长期母牛数record[1].num

                                     第二年成长期母牛数record[1].num = 上一年新出生母牛数recore[0],num

                                     新出生母牛数record[0].num = 上一年的成熟母牛数record[3].num

                                     当然这个结构体完全没有必要


然后使用map容器记录第N年中母牛的总数cnt

最后在n次询问中查询map中的记录即可

                               



注意事项:第一次写看都没看直接用队列了QAQ,结果空间时间全部爆炸,

参考代码:

#include<bits/stdc++.h>
using namespace std;

struct cow{
    int num;
}record[4];

map<int,int>m;

void func(int year){
    if(year>55){    //题目给出的年份最大值为55
        return;
    }
    record[3].num += record[2].num;
    record[2].num = record[1].num;
    record[1].num = record[0].num;
    record[0].num = record[3].num;
    m[year] = record[0].num + record[1].num + record[2].num + record[3].num;    //用map记录
    func(year+1);
}
int main(){
    record[0].num = 0;
    record[1].num = 0;
    record[2].num = 0;
    record[3].num = 1;    //设初始有一头成熟母牛
    func(2);       //从第二年开始递归
    m[1]=1;        //设第一年母牛数量为1
    int N;
    while(cin>>N){
        if(N==0)
            return 0;
        cout<<m[N]<<endl;
    }
    return 0;
}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论