題目敘述
每筆輸入有一個字串,要求輸出此字串是否為迴文,且該字串只能包含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";
}
}
留言
張貼留言