解题思路:
若n<=3,直接返回n。

当n>3时,用动态规划,定义数组cows,cows[i]表示第i年母牛数量。

前三年特殊处理,从第四年起cows[i]=cows[i-1]+cows[i-3]。

最后返回cows[n]。
注意事项:
确保输入n在0<n<55范围内且合法,注意数组下标避免越界,循环读取输入时正确判断结束条件。
参考代码:

#include <iostream>

int countCows(int n) {
    if (n <= 3) {
        return n; // 如果 n 小于等于 3,直接返回 n,因为前三年母牛数量分别为 1、2、3
    }
    int cows[n + 1];
    cows[1] = 1; // 第 1 年有 1 头母牛
    cows[2] = 2; // 第 2 年有 2 头母牛
    cows[3] = 3; // 第 3 年有 3 头母牛
    for (int i = 4; i <= n; i++) {
        cows[i] = cows[i - 1] + cows[i - 3]; // 从第 4 年开始,当前年的母牛数量等于前一年的母牛数量加上三年前的母牛数量(因为每头小母牛从第四个年头开始每年年初生一头小母牛)
    }
    return cows[n];
}

int main() {
    int n;
    while (std::cin >> n && n!= 0) {
        std::cout << countCows(n) << std::endl; // 输出第 n 年的母牛数量
    }
    return 0;
}


点赞(0)
 

0.0分

4 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论