hdu 1708 Fibonacci String 大水题 2种大水法
Fibonacci StringTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1969 Accepted Submission(s): 690
Problem DescriptionInputOutputSample InputSample OutputAuthor#include<stdio.h>#include<string.h>int main(){int a[30],b[30];char s1[50],s2[50];int cas,n,k,i,flag,flag1;scanf("%d",&cas);while(cas--){memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%s %s %d",s1,s2,&k);if(k%2==0) flag=1;// 偶数输出a[i] 奇数输出b[i] 具体原因看下面else flag=0;for(i=0;i<strlen(s1);i++){a[s1[i]-'a']++;}if(k==0){for(i=0;i<26;i++)printf("%c:%d\n",i+'a',a[i]);printf("\n");continue;}for(i=0;i<strlen(s2);i++)b[s2[i]-'a']++;if(k==1){for(i=0;i<26;i++)printf("%c:%d\n",i+'a',b[i]);printf("\n");continue;}k=k-1;flag1=1;while(k--){if(flag1==1){ for(i=0;i<26;i++){ a[i]=b[i]+a[i];}flag1=!flag1;}else{ for(i=0;i<26;i++){ b[i]=b[i]+a[i];}flag1=!flag1;}}if(flag){for(i=0;i<26;i++)printf("%c:%d\n",i+'a',a[i]);}else{for(i=0;i<26;i++)printf("%c:%d\n",i+'a',b[i]);}if(cas!=0) printf("\n");}return 0;}
自己的方法有点麻烦 看了下别人的代码 哎呦 自己的那叫一个复杂啊
参考代码作者
梦醒之后,灯火阑珊#include<stdio.h>#include<string.h>int ans[50][27]; int main(){ int T,n,i,j; char s1[31],s2[31]; scanf("%d",&T); while(T--) { scanf("%s%s%d",s1,s2,&n); memset(ans,0,sizeof(ans)); for(i=0;s1[i]!=NULL;i++) ans[0][s1[i]-'a']++; for(i=0;s2[i]!=NULL;i++) ans[1][s2[i]-'a']++; for(i=2;i<=n;i++) for(j=0;j<26;j++) ans[i][j]=ans[i-1][j]+ans[i-2][j]; for(i=0;i<26;i++) printf("%c:%d\n",'a'+i,ans[n][i]); printf("\n"); } return 0;}