C 母牛的故事 SDUT

Time Limit: 1000 ms Memory Limit: 65536 KiB


Problem Description

有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?


Input

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0< n< 55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。


Output

对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。


Sample Input

2
4
5
0


Sample Output

2
4
6


Hint

Source


HDOJ


递推:

本题求第n年的牛总数,已知第一年为“1”头,进而推出第二年“2”头,第三年“3”头,“4”头,“6”头,“9”头……
所以发现第四年以后,牛的总数就是前一年的牛的总数,加上可以生育的牛的总数,而可生育的牛的总数为三年前牛的总数,因而得到递推方程:a[n] = a[n-1] + a[n-3],(n>2)

递归:

要想求第“n”年的牛的总数,只要知道“n-1”和“n-3”年的牛的总数,再依次向前推
所以递推和递归是一个正向思维一个逆向思维

递推:

#include <stdio.h>
#include <stdlib.h>
  int main()
  {
      int n,i;
      int a[55];
      a[0] = 1;
      a[1] = 2;
      a[2] = 3;
      while(scanf("%d",&n)&&n)
      {
          for(i=3;i<n;i++)
          {
              a[i] = a[i-1] + a[i-3]; //递推方程;
          }
          printf("%d\n",a[n-1]);
      }

      return 0;
  }

递归:

#include <stdio.h>
#include <stdlib.h>

int f(int n)
{
    if(n<=4)return n;
    else return (f(n-1) + f(n-3));  //递归方程;

}
int main()
{

    int n;
    int sum;
    while(scanf("%d",&n)&&n)
    {
        sum = f(n);
        printf("%d\n",sum);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碧羽o(* ̄▽ ̄*)ブ回雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值