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