愚公移山问题.斐波那契数列变形

Description
假设愚公家族 每个人的一生是这样度过的:(开个玩笑,请无视) 头20年用来生长发育以及挖山,第21年(可以理解为21岁的时候)开始 每年生下一个孩子( 自交,任性, 没妻子,全生男,且不考虑死亡),当然还要去挖山。我们默认愚公1岁的时候为第一年(第21年愚公生下第一胎),求第N年愚公家族(愚公家族不需要妻子,别考虑太多)有多少人。
Input
有多组测试数据,每组占一行,包括一个数N(0<N<=60),N为第N年。
Output
对于每组测试,输出整数M,M为愚公家族的人数。
Sample Input 1
1
21
41
Sample Output 1
1
2
23
python代码:

I=[1 for i in range(20)]
for i in range(20,61):
    I.append(I[i-20]+I[i-1])
while 1:
    n=int(input())
    print(I[n-1])

C语言代码

#include<stdio.h>
int main()
{
    int I[61];
    int i;
    for(i=0;i<20;i++)
    {
        I[i]=1;
    }
    for(i=20;i<60;i++)
    {
        I[i]=I[i-20]+I[i-1];
    }
    int a;
    while(scanf("%d",&a)!=EOF)
    {
        printf("%d\n",I[a-1]);
    }
    return 0;
}

既然提到斐波那契数列,那就科普一下:
比萨的列奥纳多,又称斐波那契,(Leonardo Pisano ,Fibonacci, Leonardo Bigollo)中世纪意大利数学家,是西方第一个研究斐波那契数的人,并将现代书写数和乘数的位值表示法系统引入欧洲
例1:
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有的兔子都不死,那么一年以后可以繁殖多少对兔子?(注意单位:一对兔子,这跟上面愚公家族的自交,可不一样哦哈哈哈(小声bb))
我们不妨拿新出生的一对小兔子分析一下:
第一个月,只有最开始的那一对兔子,所以是一对;
第二个月,最开始的那一对兔子还没有繁殖能力呢,所以总的兔子还是一对;
第三个月,两个月前的兔子可以生下一对小兔子了,总数共有两对了;
第四个月,两个月前的兔子又可以生下小兔子了,再加上上一个月的兔子数,总数共有两三了;
。。。。。
分析一下,第n个月的总兔子数就是,上个月的兔子数,加上,上上个月的兔子有繁殖能力了又生的兔子对数。
列出来就是:
1,1,2,3,5,8,13,,,,
即F[n]=F[n-1]+F[n-2]

再返回来看愚公这个题:
头20年用来生长发育以及挖山,第21年(可以理解为21岁的时候)开始 每年生下一个孩子
就是数列的前20项都为1,以后的每一项符合F[n]=F[n-1]+F[n-20]
只要理解了总体的思路,再做题就没啥问题了

以上只是个人总结。如有问题建议啥的,评论或私聊哦~

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页