母牛的故事
2017-05-08 14:11
211 查看
题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
显然第n年牛的数量等于第n-1年牛的数量加上第n年出生牛的数量,而第n年出生牛的数量等于第n-3年牛的数量,因为只有第n-3年的牛才能在第n年生小牛。即满足一个递归式f(n)=f(n-1)+f(n-2)。采用递归效率很低(运行超时),这里采用迭代的方式求解。
代码如下:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
显然第n年牛的数量等于第n-1年牛的数量加上第n年出生牛的数量,而第n年出生牛的数量等于第n-3年牛的数量,因为只有第n-3年的牛才能在第n年生小牛。即满足一个递归式f(n)=f(n-1)+f(n-2)。采用递归效率很低(运行超时),这里采用迭代的方式求解。
代码如下:
#include<stdio.h> int main() { int n,x,y,z,fn,i; while(scanf("%d",&n)&&n!=0) { //x,y,z代表连续三年的母牛数 x=1; y=2; z=3; if(n<4) printf("%d\n",n); else { for(i=4; i<=n; i++) { fn=x+z; x=y; y=z; z=fn; } printf("%d\n",fn); } } return 0; }