递推递归练习 G

来源:互联网 发布:sql server 物化视图 编辑:程序博客网 时间:2024/05/16 10:11

Description

四级考试已经过去好几个星期了,但是小银还是对自己的英语水平担心不已。
小银打算好好学习英语,争取下次四级考试和小学弟小学妹一起拿下它!
四级考试的时候,监考老师会按考号分配固定的座位,但唯一不变的是每两个人之间肯定至少会留下两个空座位,原因相信大家都懂得。
那么问题来了,我们现在只关注教室里的一排座位,假设每排有n个座位,小银想知道这一排至少坐一个人的前提下,一共有多少种坐法。

Input

 
多组输入。
第一行输入整数n,代表教室里这一排的座位数目。(1 <= n <= 45)

Output

输出种类数目。输入输出各占一行,保证数据合法。

Sample Input

135

Sample Output

138


        这类递推递归问题的关键在于找到第n项与前面项的关系,只要找出对应的关系,问题就迎然而解了。这道题从第n个座位考虑,当第n个座位坐人时,前面两个座位都不能坐人,所以这种情况为f(n-3)种;当第n个座位不坐人时,前面的座位都可以按照要求坐人,所以这种情况为f(n-1)种;还有一种情况,就是当n个坐只有一个人且这个人坐到第n个座的时候,也是一种情况。所以这道题的递推公式为f(n)=f(n-1)+f(n-3)+1。


源代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{ int a[50],i,n;
  a[1]=1;
  a[2]=2;
  a[3]=3;
  for(i=4;i<=45;++i)
   a[i]=a[i-1]+a[i-3]+1;
  while(cin>>n)
  { cout<<a[n]<<endl;
  }
}

0 0
原创粉丝点击