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