You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or leave the ‘1’ there. Surly, you may get many different results. For example, given 1111 , you can get 1111, 121, 112,211,22. Now, your work is to find the total number of result you can get.
InputThe first line is a number n refers to the number of test cases. Then n lines follows, each line has a string made up of ‘1’ . The maximum length of the sequence is 200.
OutputThe output contain n lines, each line output the number of result you can get .
Sample Input
3 1 11 11111Sample Output
1 2 8
ac
#include<stdio.h>
#include<string.h>
int a[201][200];
void fun(){
int i,j,t;
a[1][1]=1;
a[2][1]=2;
a[3][1]=3;
a[4][1]=5;
for(i=5;i<=200;i++){
int pu=0;
for(j=1;j<=200;j++){
t=a[i-1][j]+a[i-2][j]+pu;
a[i][j]=t%10;
pu=t/10;
}
}
}
int main(void){
int n,i,x;
char s[201];
fun();
scanf("%d",&n);
getchar();
while(n--){
gets(s);
x=strlen(s);
i=199;
while(i>0&&!a[x][i]) //找出第一位
i--;
for(;i>0;i--){ //输出
printf("%d",a[x][i]);
}
printf("\n");
}
return 0;
}