您的位置:首页 > 其它

杭电 1865 1string

2015-07-27 17:43 302 查看

1sting

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

Total Submission(s): 4155 Accepted Submission(s): 1563



[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
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.

[align=left]Output[/align]
The output contain n lines, each line output the number of result you can get .

[align=left]Sample Input[/align]

3
1
11
11111


[align=left]Sample Output[/align]

1
2
8        本题主要考察大数斐波拉契数列   按照一般的做法来写数据会溢出已AC代码:[code]#include<stdio.h>
#include<string.h>
int main()
{
int a[201][100];
char b[1001];
int len,c,m,n,i,j;
memset(a,0,sizeof(a));
a[1][0]=1,a[2][0]=2;
for(c=0,i=3;i<201;i++)
{
for(m=0,j=0;j<=100;j++)
{
c=a[i-1][j]+a[i-2][j]+m;
a[i][j]=c%10;//不断取余将所求之和用二维数组存储起来
m=c/10;
}
}
int s,l,k;
scanf("%d",&s);
getchar();
while(s--)
{
gets(b);
len=strlen(b);
for(i=99,k=0;i>=0;i--)
{
if(a[len][i]!=0)//通过输入1的个数来找到相应的值所在二维数组的位置
k++;
if(k!=0)
printf("%d",a[len][i]);
}
printf("\n");
}
return 0;
}

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: