题目:1043 输出PATest (20 分)
给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按
PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。输入格式:
输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
思路:
- 遍历整个字符串,计算各字符的个数。
- 循环判断。将字符按顺序判断,个数不为0则输出。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 14 int main() 15 { 16 string str; 17 cin >> str; 18 int P, A, T, e, s, t; 19 P = A = T = e = s = t = 0; 20 for(int i = 0; i < str.length(); i++) 21 { 22 if(str[i] == 'P') 23 P++; 24 else if(str[i] == 'A') 25 A++; 26 else if(str[i] == 'T') 27 T++; 28 else if(str[i] == 'e') 29 e++; 30 else if(str[i] == 's') 31 s++; 32 else if(str[i] == 't') 33 t++; 34 } 35 while(1) 36 { 37 if(P) 38 { 39 printf("P"); 40 P--; 41 } 42 if(A) 43 { 44 printf("A"); 45 A--; 46 } 47 if(T) 48 { 49 printf("T"); 50 T--; 51 } 52 if(e) 53 { 54 printf("e"); 55 e--; 56 } 57 if(s) 58 { 59 printf("s"); 60 s--; 61 } 62 if(t) 63 { 64 printf("t"); 65 t--; 66 } 67 if(P == 0 && A == 0 && T == 0 && e == 0 && s == 0 && t == 0) 68 break; 69 } 70 return 0; 71 }
总结:
思路有简单有复杂,全看人脑回路怎么想,把问题简单化的脑子是好脑子,复杂化的容易给脑子产生负担。但是思路简单了,打出的代码不一定是简单的代码,如何把代码打得跟思路一样简单也需要时间磨练。
一看完题目想到的就是遍历字符串,遇到P先输出以此类推,然后输出过的做上标记不再重复输出,但是感觉这样子的话,代码实现起来好像很麻烦,于是就想那可以加个计数,这样就不用那么麻烦的逐一标记了。但是怎么感觉自己还是想的有点麻烦,因为我一直想着输出的时候是要用到原字符串的!后来看到大神的代码思路后,恍然大悟,这题还只是个简单题,要求没那么多,既然只是有多少个全部输出,又计数了,那么只要判断有没有把字符们全部按要求的顺序输出就可以了,果然还是想麻烦了!于是就有了这样的代码。