字母重排
样例输入:
tarp given score refund only trap work earn course pepper part
******
resco nfudre aptr sett oresuc
样例输出:
score
refund
part tarp trap
:(
course
题目要求:输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int n; 5 char word[2000][10],sorted[2000][10]; 6 7 int cmp_char(const void* _a,const void * _b) 8 { 9 char *a=(char *)_a; 10 char *b=(char *)_b; 11 return *a-*b; 12 } 13 14 int cmp_string(const void* _a,const void* _b) 15 { 16 char *a=(char *)_a; 17 char *b=(char *)_b; 18 return strcmp(a,b); 19 } 20 21 int main() 22 { 23 int i; 24 n=0; 25 for(;;) 26 { 27 scanf("%s",word[n]); 28 if(word[n][0]=='*') 29 break; 30 n++; 31 } 32 qsort(word,n,sizeof(word[0]),cmp_string); 33 for(i=0;i<n;i++) 34 { 35 strcpy(sorted[i],word[i]); 36 qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char); 37 } 38 char s[10]; 39 while(scanf("%s",s) == 1) 40 { 41 qsort(s,strlen(s),sizeof(char),cmp_char); 42 int found=0; 43 for(i=0;i<n;i++) 44 { 45 if(strcmp(sorted[i],s)==0) 46 { 47 found=1; 48 printf("%s ",word[i]); 49 } 50 } 51 if(!found) 52 printf(":("); 53 printf(" "); 54 } 55 return 0; 56 }