首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hdu 1708 Fibonacci String 大水题 二种大水法

2012-09-09 
hdu 1708 Fibonacci String 大水题 2种大水法Fibonacci StringTime Limit: 3000/1000 MS (Java/Others)Mem

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;}


 

 


 

热点排行