用c语言n 2. 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
时间: 2024-02-12 16:09:15 浏览: 22
可以使用递归的方式来解决这个问题。当n等于1时,母牛数量为1;当n小于等于3时,母牛数量为n;当n大于3时,母牛数量为前一年母牛数量加上四年前母牛数量,即:
f(n) = f(n-1) + f(n-4)
以下是用C语言编写的代码实现:
```c
#include <stdio.h>
int calc_cows(int n) {
if (n == 1) {
return 1;
} else if (n <= 3) {
return n;
} else {
return calc_cows(n-1) + calc_cows(n-4);
}
}
int main() {
int n;
printf("请输入年份n:");
scanf("%d", &n);
printf("第%d年共有%d头母牛。\n", n, calc_cows(n));
return 0;
}
```
在这个代码中,我们定义了一个函数 `calc_cows` 来计算第n年共有多少头母牛。在main函数中,我们通过scanf函数获取输入的年份n,并输出计算结果。
相关问题
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请C语言实现在第n年的时候,共有多少头母牛?
思路:
- 第一年开始只有一头母牛。
- 第二年开始有两头母牛,因为第一头母牛生了一头小母牛。
- 第三年开始有三头母牛,因为第一头母牛又生了一头小母牛,第二头母牛还没生小母牛。
- 第四年开始有四头母牛,因为第一头母牛生了两头小母牛,第二头母牛生了一头小母牛。
- 第五年开始有六头母牛,因为第一头母牛生了三头小母牛,第二头母牛生了两头小母牛。
- 第六年开始有九头母牛,因为第一头母牛生了四头小母牛,第二头母牛生了三头小母牛,第三头母牛生了两头小母牛。
根据上面的规律,我们可以列出递推式:
f(n) = f(n-1) + f(n-3)
其中f(n)表示第n年的母牛数量,f(n-1)表示前一年的母牛数量,f(n-3)表示从第四年开始生的小母牛数量,因为它们在第n年已经长大了。
代码实现:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入年份:");
scanf("%d", &n);
int a = 1, b = 2, c = 3, d;
for (int i = 4; i <= n; i++) {
d = a + c;
a = b;
b = c;
c = d;
}
printf("%d年时共有%d头母牛。\n", n, c);
return 0;
}
```
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请C语言编程实现在第n年的时候,共有多少头母牛?
可以使用递归的方式来解决这个问题。假设在第n年的时候,共有f(n)头母牛。那么可以得到以下递归公式:
f(n) = f(n-1) + f(n-4)
其中,f(n-1)表示上一年的母牛数量,f(n-4)表示上一年开始生育的小母牛数量。当n<4时,f(n)的值为n,因为前三年每年只有一头母牛。
下面是C语言实现的代码:
```c
#include <stdio.h>
int count_cows(int n) {
if (n < 4) {
return n;
} else {
return count_cows(n-1) + count_cows(n-4);
}
}
int main() {
int n;
printf("请输入年份:");
scanf("%d", &n);
printf("第%d年共有%d头母牛。\n", n, count_cows(n));
return 0;
}
```
输入年份后,程序会输出在该年份共有的母牛数量。