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

Tags: