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;
}

发布了162 篇原创文章 · 获赞 119 · 访问量 3204

猜你喜欢

转载自blog.csdn.net/zhangzhaolin12/article/details/104040349