1sting
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4157 Accepted Submission(s): 1564
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思路:这是一道大数题,规律是斐波那契,因为要两个数相加,将这两个数都放到数组中去,因为有l=strlen(s)个数,所以用二维数组记录。代码:#include<stdio.h> #include<stdlib.h> #include<string.h> int num[300][1000]; char s[1000]; int main() { int i,n,l,len,k,j; scanf("%d",&n); while(n--) { scanf("%s",s); l=strlen(s); memset(num,0,sizeof(num)); num[1][1]=1;num[2][1]=2; len=1; for(i=3;i<=l;i++) { for(k=1;k<=len;k++) { num[i][k]=num[i][k]+num[i-1][k]+num[i-2][k]; if(num[i][k]>9) { num[i][k+1]+=num[i][k]/10; num[i][k]%=10; } if(num[i][len+1]) { len++; } } } for(i=len;i>=1;i--) { printf("%c",num[l][i]+'0'); } printf("\n"); } return 0; }