081文迪


私信TA

用户名:dotcpp0787208

访问量:406

签 名:

等  级
排  名 12411
经  验 974
参赛次数 3
文章发表 9
年  龄 0
在职情况 学生
学  校 内江师范学院
专  业

  自我简介:

TA的其他文章

解题思路:
若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分

4 人评分

  评论区

  • «
  • »