【PAT乙级】输出PATest
- 2019 年 11 月 8 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/84920157
题目描述:
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入描述:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出描述:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
解题思路:
首先看完题目之后,第一反应就是建立一个map来记录每种字符有多少个,然后用while和if来操作,让程序按 PATestPATest....
这样的顺序输出。若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
AC代码:
#include <bits/stdc++.h> using namespace std; int main() { map<char,int> m; string s; cin >> s; for (int i = 0; i < s.length(); i++) { m[s[i]]++; //记录每种字符有多少个 } while(m['P']||m['A']||m['T']||m['e']||m['s']||m['t']) //若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出 { if(m['P']) { cout << 'P'; m['P']--; } if(m['A']) { cout << 'A'; m['A']--; } if(m['T']) { cout << 'T'; m['T']--; } if(m['e']) { cout << 'e'; m['e']--; } if(m['s']) { cout << 's'; m['s']--; } if(m['t']) { cout << 't'; m['t']--; } } return 0; }