poj 1318 Word Amalgamation

来源:互联网 发布:mac word 转pdf 不成功 编辑:程序博客网 时间:2024/04/27 01:01

这种字符串的题一定要仔细,不然很容易WA。。。

我开始的一种方法不是处理dictionary和sortDis,而是每次都搜索一次,到现在我都还没找到为什么错了。。。

后一种代码就是先处理dictionary和sortDis,之后就容易处理了


AC的代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;char dictionary[102][10];//1~100词,每个词1~6字母char sortDic[102][10];//排序以后的字典int dicNum;//字典中词的个数int main(){//freopen("test.txt","r",stdin);char tmp[7];int i;//输入字典,从下标0开始okfor(i=0; ;i++){scanf("%s",tmp);if(strcmp(tmp,"XXXXXX")==0)break;strcpy(dictionary[i],tmp);}dicNum=i;//处理dictionary和sortDicint j;for(i=0;i<dicNum;i++)for(j=0;j<dicNum;j++)if(strcmp(dictionary[i],dictionary[j])<0){strcpy(tmp,dictionary[j]);strcpy(dictionary[j],dictionary[i]);strcpy(dictionary[i],tmp);}//字典顺序已经排好//test/*for(i=0;i<dicNum;i++)printf("%s\n",dictionary[i]);*/for(i=0;i<dicNum;i++)//排sortDic{strcpy(sortDic[i],dictionary[i]);sort(sortDic[i],sortDic[i]+strlen(sortDic[i]));}//输入待排序数while(scanf("%s",tmp)){if(strcmp(tmp,"XXXXXX")==0)return 0;sort(tmp,tmp+strlen(tmp));int count=0;for(i=0;i<dicNum;i++)if(strcmp(tmp,sortDic[i])==0)//相等就标记一下{printf("%s\n",dictionary[i]);count++;}if(count==0){printf("NOT A VALID WORD\n");printf("******\n");continue;}printf("******\n");}return 0;}


一直WA的代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;char dictionary[102][7];//1~100词,每个词1~6字母char sortDic[102][7];//排序以后的字典int dicNum;//字典中词的个数int flag[102];int main(){//freopen("test.txt","r",stdin);char tmp[7];int i;//输入字典,从下标1开始okfor(i=1; ;i++){scanf("%s",tmp);if(strcmp(tmp,"XXXXXX")==0)break;strcpy(dictionary[i],tmp);strcpy(sortDic[i],tmp);sort(sortDic[i],sortDic[i]+strlen(tmp));}dicNum=i-1;//test/*for(i=1;i<=dicNum;i++)printf("%s\n",dictionary[i]);*///test/*for(i=1;i<=dicNum;i++)printf("%s\n",sortDic[i]);*///输入待排序数while(scanf("%s",tmp)){if(strcmp(tmp,"XXXXXX")==0)return 0;//init flagmemset(flag,0,sizeof(flag));sort(tmp,tmp+strlen(tmp));int count=0;for(i=1;i<=dicNum;i++)if(strcmp(tmp,sortDic[i])==0)//相等就标记一下{flag[i]=1;count++;}if(count==0){printf("NOT A VALID WORD\n");printf("******\n");continue;}//开始正式输出int pos=1;while(1){strcpy(tmp,"zzzzzz");//tmp必然是选出来最靠前的for(i=1;i<=dicNum;i++){if(flag[i]==1 && strcmp(tmp,dictionary[i])>0)//tmp字典序靠后{strcpy(tmp,dictionary[i]);pos=i;}}if(count==0)break;else{printf("%s\n",tmp);count--;flag[pos]=0;//改回去}}printf("******\n");}return 0;}


原创粉丝点击