1sting
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 36 Accepted Submission(s) : 10
Problem Description
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.
Input
The 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.
Output
The output contain n lines, each line output the number of result you can get .
Sample Input
3 1 11 11111
Sample Output
1 2 8
Author
z.jt
大斐波数
ac代码:
大斐波数
ac代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 200
#define M 100
int f[N+10][M+10];
void fib()
{
f[1][0]=1;
f[2][0]=2;
int i,j;
//memset(f,0,sizeof(f));
for(i=3;i<N+10;i++)//后一项等于前两项之和
for(j=0;j<M+10;j++)
{
f[i][j]+=(f[i-1][j]+f[i-2][j]);
if(f[i][j]>=10)
{
f[i][j]%=10;
f[i][j+1]=1;
}
}
}
int main()
{
int t;
int i;
fib();
scanf("%d",&t);
while(t--)
{
char s[200];
scanf("%s",s);
int len=strlen(s);
int bz=0;
for(i=M;i>=0;i--)
{
if(bz==0&&f[len][i])
{
bz=1;
}
if(bz)
printf("%d",f[len][i]);
}
printf("\n");
}
return 0;
}