题目要求:
考试分配座位,老师会按照考好分配固定的座位,每两个人之间至少留下两个空座位,只关注教室一排座位,设每排有n(1<=n<=45)个座位,这一排至少坐一个人的前提下,一共有多少种坐法。
题目思路:
n<=45,所以直接利用循环求出1至45个座位的坐法,利用递推,数组a代表i个座位的坐法种数,a【i】=a【i-1】+a【i-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;
return 0;
}
感悟:做递归递推的题目要多动笔,多写几个测试实例,找出递归、递推的边界。