首页 > 技术文章 > 1043 输出PATest (20 分)

Anber82 2019-08-11 20:10 原文

题目: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先输出以此类推,然后输出过的做上标记不再重复输出,但是感觉这样子的话,代码实现起来好像很麻烦,于是就想那可以加个计数,这样就不用那么麻烦的逐一标记了。但是怎么感觉自己还是想的有点麻烦,因为我一直想着输出的时候是要用到原字符串的!后来看到大神的代码思路后,恍然大悟,这题还只是个简单题,要求没那么多,既然只是有多少个全部输出,又计数了,那么只要判断有没有把字符们全部按要求的顺序输出就可以了,果然还是想麻烦了!于是就有了这样的代码。

推荐阅读