题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
输入样例 | 输出样例 |
2 | 2 |
4 | 4 |
5 | 6 |
0 |
通过分析我们发现 第n年的母牛数量=第(n-1)年母牛数量+第(n-3)年母牛数量
题解一:递归
#include<stdio.h>
int sumCow(int year) {
int sum;
if(year < 4) {
sum = year;
}
else sum = sumCow(year - 1) + sumCow(year - 3); //第n年母牛数为(n-1)年母牛数与(n-3)年母牛数之和
return sum;
}
int main() {
int year;
do {
scanf("%d",&year);
if(year!=0)
printf("%d\n",sumCow(year));
}while(year!=0);
}
题解二:数组
在用第一种方法时没有用到题目中所给的数据55,而且用递归调用速度较慢,所以用数组存储1~55年母牛的数量。
#include<stdio.h>
#define N 55
void cowArray(int a[55]) {
for(int i = 0;i < N;i++){
if(i<4)
a[i] = i+1;
else{
a[i] = a[i - 1] + a[i - 3];
}
}
}
int main() {
int year;
int a[100];
cowArray(a);
do {
scanf("%d",&year);
if(year!=0)
printf("%d\n",a[year - 1]); //数组中对应的值为year-1
}while(year!=0);
}