Home11月27日:愚公移山(斐波那契)

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

思路

  1. 首先可以看出此题是特殊的斐波那契数列,因为要等到愚公20岁之后才会有后代,所以前20年人数都是1。到21年才会有第一个后代,从21到40每年增加一个后代。
  2. 到41年,愚公的第一个后代开始有后代,所以这一年增加2个人。42年第二个后代也开始有后代,所以增加3个人。依次类推,从41年到60年每年增加的人数比上一年多一个。
  3. 之所以20年以后,每年增加的后代会变化,是因为20年前的人都会在今年有后代,所以20年以后的人数即为上一年人数加上20年前的人数。
#include <stdio.h>

int f(int x)
{
    if (x <= 20) return 1;
    return f(x - 1) + f(x - 20);
}

int main(void)
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        printf("%d\n", f(n));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值