字母重排(字符串处理)

来源:互联网 发布:js导入导出excel数据 编辑:程序博客网 时间:2024/04/30 04:01

题目信息如下:

输入一个字典,(用******结尾),然后 再输入若干单词,每输入一个单词W,你都需要在字典中找到所有可以用W的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间,用空格或空行隔开,切所有输入,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。


题意分析:

快速方法就是将字典先重排,然后在与输入的重排后的数据进行比较,快速简单,若寻找到相同的则输出,否则输出:(。

代码如下:(此解法详解析参考《算法竞赛入门》)

#include<stdio.h>#include<string.h>#include<stdlib.h>int n;char a[2020][10],s[2020][10];int cmp(const void *a,const void *b){return *(char *)a-*(char *)b;}int cmp1(const void *a,const void *b){char *c=(char *)a;char *d=(char *)b;return strcmp(c,d);}int main(){n=0;for(;;){scanf("%s",s[n]);if(s[n][0]=='*'){break;}n++;}qsort(s,n,sizeof(s[0]),cmp1);for(int i=0;i<n;i++){strcpy(a[i],s[i]);qsort(a[i],strlen(a[i]),sizeof(char),cmp);}char t[10];while(~scanf("%s",t)){qsort(t,strlen(t),sizeof(char),cmp);int found=0;for(int i=0;i<n;i++){if(strcmp(t,a[i])==0){printf("%s ",s[i]);found=1;}}if(!found)printf(":(");printf("\n");}return 0;}


0 0
原创粉丝点击