ZeroJudge M801: 鏡像對稱 (Mirror)

題目敘述

每筆輸入有一個字串,要求輸出此字串是否為迴文,且該字串只能包含AHIMOTUVWXY。如有任一項沒有達到,則輸出No,反之則輸出Yes。


範例輸入 #1

A

範例輸出 #1

Yes


範例輸入 #2

ABA

範例輸出 #2

No


範例輸入 #3

HOHOH

範例輸出 #3

Yes


解題思路

可以使用EOF的方式一個字元一個字元來收並使用Map或if來判斷該字元是否為AHIMOTUVWXY的其中一個,需要注意的是,就算判斷到該字元不屬於AHIMOTUVWXY也需要把資料讀完才能輸出No,所以可以使用一個布林值來存能不能直接輸出No。如果為AHIMOTUVWXY的其中一個字元的話就將其字元加到一個string的變數中待EOF結束後做迴文的判斷。迴文的判定可以使用Algorithm中的reverse來判斷從右到左和從左到右的字串是否為一樣的。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    char ch;
    string str = "";
    map<char, int>MAP;
    MAP['A'] = 1;
    MAP['H'] = 1;
    MAP['I'] = 1;
    MAP['M'] = 1;
    MAP['O'] = 1;
    MAP['T'] = 1;
    MAP['U'] = 1;
    MAP['V'] = 1;
    MAP['W'] = 1;
    MAP['X'] = 1;
    MAP['Y'] = 1;
    bool stop = false;
    while (cin >> ch)
    {
        if (MAP[ch] == 1) str += ch;
        else stop = true;
    }
    if (stop) cout << "No\n";
    else
    {
        string tmp = str;
        reverse(tmp.begin(), tmp.end());
        if (tmp == str) cout << "Yes\n";
        else cout << "No\n";
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天