光棍的yy
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。
现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??
例如(111 可以拆分为 111 12 21 有三种)
-
输入
-
第一行输入一个n表示有n个测试数据
以下n行,每行输入m个1
(1 <= n,m <= 200)
输出
- 输出这种组合种数,占一行 样例输入
-
3 11 111 11111
样例输出
-
2 3 8
来源
\\大数+斐波那契
#include<stdio.h> #include<string.h> char a[250]; int b[60],c[60],d[60],he[205][60]; int main() { int n,ok=0; memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(he,0,sizeof(he)); c[59]=1,d[59]=2; for(int sb=1;sb<=198;sb++) { memset(b,0,sizeof(b)); for(int i=59;i>=0;i--) { int jin=0; b[i]+=c[i]+d[i]; if(b[i]>=10) { b[i-1]+=b[i]/10; b[i]=b[i]%10; } } for(int i=59;i>=0;i--) { c[i]=d[i]; d[i]=b[i]; } for(int i=59;i>=0;i--) { he[ok][i]=b[i]; } ok++; } scanf("%d",&n); while(n--) { scanf("%s",a); int l; l=strlen(a); if(l==1) printf("1\n"); else if(l==2) printf("2\n"); else { for(int i=0;i<=59;i++) { if(he[l-3][i]!=0) { for(int j=i;j<=59;j++) printf("%d",he[l-3][j]); printf("\n"); break; } } } } }
-
第一行输入一个n表示有n个测试数据