1. 程式人生 > >水題 ZOJ

水題 ZOJ

題目描述:

讀入一個字串,字串中包含ZOJ三個字元,個數不一定相等,按ZOJ的順序輸出,當某個字元用完時,剩下的仍然按照ZOJ的順序輸出。

輸入描述:

每組用例佔一行,包含ZOJ三個字元。
1<=length<=100。

輸出描述:

對於每組輸入,請輸出一行,表示按照要求處理後的字串。
具體可見樣例。

輸入樣例:

ZZOOOJJJ

輸出樣例:

ZOJZOJOJ

解題思路:

這道水題跟一道PAT乙級題一樣的,友情連結:有幾個PAT。建立一個map來記錄每種字元有多少個,然後用while和if來操作,讓程式按 ZOJZOJ .... 這樣的順序輸出。若某種字元已經輸出完,則餘下的字元仍按 ZOJ 的順序列印,直到所有字元都被輸出。

AC程式碼:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    string s;
    cin >> s;
    map<char,int> m;    //用來記錄字元數
    for(auto it : s)
    {
        m[it]++;
    }
    while(m['Z']||m['O']||m['J'])
    //若某種字元已經輸出完,則餘下的字元仍按 ZOJ 的順序列印,直到所有字元都被輸出
    {
        if(m['Z'])
        {
            cout << 'Z';
            m['Z']--;
        }
        if(m['O'])
        {
            cout << 'O';
            m['O']--;
        }
        if(m['J'])
        {
            cout << 'J';
            m['J']--;
        }
    }
    return 0;
}