给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
redlesPayBestPATTopTeePHPereatitAPPT
PATestPATestPTetPTePePee
0、乍一看会被题目描述的“请将字符串调整顺序”“忽略其他字符”“请按PATest顺序输出”“六种字符个数不一”吓到,其实这题比之前的散列题都要简单的多
1、整体思路
以arr[6]统计6种字符出现的次数,再while循环,按PATest顺序输出,每输出一个字符arr[i]--,减到0时停止该字符的输出
2、题解代码
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 6 int main() { 7 8 int arr[6]; 9 for (int i = 0; i < 6; i++) { 10 arr[i] = 0; 11 } 12 13 char str[10010]; 14 cin>>str; 15 int len = strlen(str); 16 for (int i = 0; i < len; i++) { 17 if (str[i] == ‘P‘) { 18 arr[0]++; 19 } else if (str[i] == ‘A‘) { 20 arr[1]++; 21 } else if (str[i] == ‘T‘) { 22 arr[2]++; 23 } else if (str[i] == ‘e‘) { 24 arr[3]++; 25 } else if (str[i] == ‘s‘) { 26 arr[4]++; 27 } else if (str[i] == ‘t‘) { 28 arr[5]++; 29 } 30 } 31 32 while (arr[0] != 0 || arr[1] != 0 || arr[2] != 0 || arr[3] != 0 || arr[4] != 0 || arr[5] != 0) { 33 if (arr[0] != 0) { 34 printf("P"); 35 arr[0]--; 36 } 37 if (arr[1] != 0) { 38 printf("A"); 39 arr[1]--; 40 } 41 if (arr[2] != 0) { 42 printf("T"); 43 arr[2]--; 44 } 45 if (arr[3] != 0) { 46 printf("e"); 47 arr[3]--; 48 } 49 if (arr[4] != 0) { 50 printf("s"); 51 arr[4]--; 52 } 53 if (arr[5] != 0) { 54 printf("t"); 55 arr[5]--; 56 } 57 } 58 59 return 0; 60 }
【算法学习记录-散列】【PAT B1043】输出PATest
原文:https://www.cnblogs.com/Bananice/p/14325332.html