现在的位置: 首页 > 综合 > 正文

POJ 1953

2013年12月18日 ⁄ 综合 ⁄ 共 1217字 ⁄ 字号 评论关闭

用最朴素的方法打出前三十组数据,发现是fibonacci数列,直接水过。

此外还可以用排列组合的方法。n=3时,由插空法得C(4,0)+C(3,1)+C(2,2); n=k时则是sigma C(k-i+1,i)   (i=0..(k+1)/2)

 

Problem
Given a positive integer n, determine the number of different chanting patterns of this length, i.e., determine the number of n-bit sequences that contain no adjacent 1's. For example, for n = 3 the answer is 5 (sequences 000, 001, 010, 100, 101 are acceptable
while 011, 110, 111 are not).

Input

The first line contains the number of scenarios.
For each scenario, you are given a single positive integer less than 45 on a line by itself.

Output

The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Then print a single line containing the number of n-bit sequences which have no adjacent 1's. Terminate
the output for the scenario with a blank line.

Sample Input

2
3
1

Sample Output

Scenario #1:
5

Scenario #2:
2

 

 

 

#include <stdio.h>
int sum;
int a[50];
__int64 f[50];
int fun(int n,int k){
    if (k>n) {
        sum++;
        return sum;
    }
    else{
        a[k]=0;
        fun(n,k+1);
        if (a[k-1]==0){
            a[k]=1;
            fun(n,k+1);
        }
        return sum;
    }

}
int main(){
    int i;
    f[1]=2;f[2]=3;
    for (i=3;i<=49;i++){
        f[i]=f[i-1]+f[i-2];
    }
/*    for (int i=1;i<=30;i++){
        sum=0;
        printf("n=%d  sum =%d\n",i,fun(i,1));
        printf("n=%d  fibo=%d\n",i,f[i]);
    }*/
    int n,x;
    scanf("%d",&n);
    for (i=1;i<=n;i++){
        scanf("%d",&x);
        printf("Scenario #%d:\n",i);
        printf("%lld\n\n",f[x]);
    }


    return 0;
}

 

抱歉!评论已关闭.