Description
对于一个只由0,1组成的序列,要求该序列中不能有相邻的1。问对于给定长度N,满足条件的0,1序列共有多少种呢?
Input
第一行为一个整数Q,表示询问的次数。接下来Q行每行一个整数N(1<=N<=44)。
Output
对于每个询问输出一个整数,表示满足题述条件的长度为N的0,1序列的个数。
Sample Input
2
1
2
Sample Output
2
3
链接:http://202.119.236.66/acmhome/problemdetail.do?&method=showdetail&id=1043
此题乍一看有点难度,其实是大水题,是斐波那契数列。这是这么推出来的:f(n)表示长度为n的没有相邻的1序列;可以分为两种情况来得到这个序列,第一种是最后一个数填0,前n-1个数只要没有相邻的1,就是符合条件的,一共有f(n-1)种;第二种是最后一个数填1,这样的话要得到满足条件的序列倒数第二个数要填0,前n-2个数只要没有相邻的1,就是符合条件的,一共有f(n-2)种;所以递推公式为:f(n)=f(n-1)+f(n-2)。代码如下:
#include<stdio.h>
int main()
{
int a[45],n,i,q;
a[1]=2; a[2]=3;
for(i=3; i<=44; i++)
a[i] = a[i-1] + a[i-2];
scanf("%d",&q);
while(q--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}