您的位置:首页 > 其它

【杭电-oj】-1865-1sting(大数斐波那契数列)

2016-07-18 16:53 429 查看


1sting

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5021    Accepted Submission(s): 1864


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

 

这道题也是斐波那契数列,只是需要用字符串把1的个数转换为n而已。
#include<cstdio>
#include<cstring>
int main()
{
int t,l,k;
char a[201];
int f[1001][211]={0};			//全部初始化为0
f[1][1]=1;
f[2][1]=2;
for(int i=3;i<=1000;i++)
{
for(int j=1;j<=210;j++)			//二维数组,i表示第几个数,j表示这个数的第几位,
{								// 然后对j进行类似大数相加的运算
f[i][j]+=f[i-1][j]+f[i-2][j];
if(f[i][j]>9)
{
f[i][j]-=10;
f[i][j+1]++;
}
}
}
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
l=strlen(a);
k=100;
for( ;f[l][k]==0;k--);			//开始全部初始化为零,直到遇到一个f
[k]!=0,此时跳出循环,开始输出
for( ;k>=1;k--)					//这种倒着输出不同于之前的倒着输出,此时不用考虑是否进位,只要不超出范围即可
printf("%d",f[l][k]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: