【PAT乙级】输出PATest

  • 2019 年 11 月 8 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/84920157

题目描述:

给定一个长度不超过 10​4​​ 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。

输入描述:

输入在一行中给出一个长度不超过 10​4​​ 的、仅由英文字母构成的非空字符串。

输出描述:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

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;  }