PAT(乙级)2019年冬季考试 7-3 String复读机 (20分)
7-3 String复读机 (20分)
给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 gnirtSSs 要调整成 StringS 输出,其中 s 是多余字符被忽略。
输入格式:
输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
sTRidlinSayBingStrropriiSHSiRiagIgtSSr
输出样例:
StringStringSrigSriSiSii
代码讲解:利用hash将各个字母个数求出来,挨个输出,直到个数为0为止。。。
1 #include<stdio.h> 2 int main() 3 { 4 char a[128]={0},c,s[10001]; 5 int i; 6 gets(s); 7 for(i=0;s[i]!='\0';i++) 8 { 9 a[s[i]]++; 10 } 11 while(a['S']!=0||a['t']!=0||a['r']!=0||a['i']!=0||a['n']!=0||a['g']!=0) 12 { 13 if(a['S']!=0) 14 { 15 printf("S"); 16 a['S']--; 17 } 18 if(a['t']!=0) 19 { 20 printf("t"); 21 a['t']--; 22 } 23 if(a['r']!=0) 24 { 25 printf("r"); 26 a['r']--; 27 } 28 if(a['i']!=0) 29 { 30 printf("i"); 31 a['i']--; 32 } 33 if(a['n']!=0) 34 { 35 printf("n"); 36 a['n']--; 37 } 38 if(a['g']!=0) 39 { 40 printf("g"); 41 a['g']--; 42 } 43 } 44 printf("\n"); 45 return 0; 46 }

浙公网安备 33010602011771号