兔子繁殖C语言实现
作者:互联网
有一种兔子,出生后一个月就可以长大,然后再过一个月一对长大的兔子就可以生育一对小兔子且以后每个月都能生育一对。现在,我们有一对刚出生的这种兔子,那么,n个月过后,我们会有多少对兔子呢?假设所有的兔子都不会死亡。
输入
输入文件仅一行,包含一个自然数n (1 <= n <= 50)。
输出
输出文件仅一行,包含一个自然数,即n个月后兔子的对数。
样例输入 Copy
5
样例输出 Copy
5
问题很简单,关键在于如何找到递推公式
第0个月 | 第1个月 | 第2个月 | 第3个月 | 第4个月 | |
大兔子 | 0 | 1 | 1 | 2 | 3 |
小兔子 | 1 | 0 | 1 | 1 | 2 |
假设第n个月的总兔子数为sum[n]。
那么那么第n个月的总兔子数其实分为两类,一类是大兔子的个数,一类是小兔子的个数
而我们其实仔细思考可以知道这样的关系:
第n个月的大兔子个数其实等于sum[n-1],理由是
第n-1个月的兔子,无论是大兔子还是小兔子,经过一个月后都是大兔子。
第n个月的小兔子个数其实等于sum[n-2],理由是第n个月的小兔子是第n-1个月的大兔子生的,而第n-1个月的大兔子又是第n-2个月的兔子即sum[n-2].
从而得出公式sum[n]=sum[n-1]+sum[n-2]。
代码实现
我觉得输出第五个月是8,但是答案的结果一直比我早一天,所以改为与题目相同的答案,要单独考虑n==2。
#include <stdio.h>
int main(){
int i,n,a[55];
scanf("%d",&n);
a[0]=1;
for (i=1;i<=n;i++){
if (i==1)a[i]=1;
else if (i==2)a[i]=2;
else if (i>2)a[i]=a[i-1]+a[i-2];
}
if (n==2)printf("%d\n",a[n]);
else printf("%d\n",a[n-1]);
return 0;
}
轻喷!!!!
标签:输出,sum,个数,兔子,C语言,繁殖,小兔子,一对 来源: https://blog.csdn.net/qq_51533157/article/details/117854801