版权声明:那啥,咱一个萌新写的东西没啥价值。但是也要打个招呼吧…… https://blog.csdn.net/Miaplacidus/article/details/88608829
今天感觉还挺充实的,没有玩拳皇13,有点手痒……
晚上回寝室看到室友都在学习,也不好意思玩游戏,就找道题做。
题目
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
Sample Input
2
4
5
0
Sample Output
2
4
6
这题我看了15分钟,就是瞅着眼熟,想着用递归做,却想不出具体做法……
后来才发现这不就和斐波那契数列一回事吗?
AC的代码
#include<stdio.h>
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF){
if(n==0)
break;
printf("%d\n",cows(n));
}
return 0;
}
int cows(int n)
{
if(0<n&&n<5)
return n;
else
return cows(n-1)+cows(n-3);
}
15分17秒看题加思考,4分51秒敲代码。
使用递归来做
每一年的母牛数都可以分解为上一年母牛数+年初产量
因为前四年都只有第一头母牛在生产,每年增加1头
且
化简为
当n>4时,每年都有新成熟的牛犊,
第n年时,年份为n-3存在的母牛全部生产且本年只有这些母牛生产
∴
然后直接写递归并调用就行了。
Run ID | Submit Time | Judge Status | Pro.ID | Exe.Time | Exe.Memory | Code Len. | Language | Author |
---|---|---|---|---|---|---|---|---|
28585244 | 2019-03-16 23:11:47 | Accepted | 2018 | 15MS | 1696K | 233 B | C | Overstars |
想要学数据结构,我又得滚回去学C Primer Plus第十四章了……
2019年3月16日23点36分