1sting
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3117 Accepted Submission(s): 1194
3 1 11 11111
1 2 8
ans[n]=ans[n-1]+ans[n-2]。
由于数字只有'1'和'2'这两种,那么当让第n
位为1的时候,ans[n]加上ans[n-1];当让最后两位
合并成2的时候,ans[n]加上ans[n-2](因为要保证
倒数第二位一定是1)。
算出来的ans就是一个斐波那契数列。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=205;
int a[N][N];
char s[N];
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>s;
int i,j,d;
d=strlen(s);
for(i=0;i<=d;i++)
for(j=0;j<=d;j++)
a[i][j]=0;
a[0][0]=0;a[1][0]=1;a[2][0]=2;
for(i=3;i<=d;i++)
{
int c=0,ss;
for(j=0;j<d;j++)
{
ss=a[i-1][j]+a[i-2][j]+c;
c=ss/10;
a[i][j]=ss%10;
}
}
int k=N-1;
while(k--)
if(a[d][k])
break;
for(i=k;i>=0;i--)
cout<<a[d][i];
cout<<endl;
}
return 0;
}