題目敘述
本題採用EOF方式收資料,每筆資料第一行有一個正整數N,代表回合數,當N等於-1時停止收資料。每筆資料第二行有一個字串是答案,第三行有一個字串代表猜測的字元。要求輸出是否有在七個猜測錯誤內猜對完整的字串。
範例輸入 #1
1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1
範例輸出 #1
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.
解題思路
收到猜測字串的時候跑For迴圈判斷每一個字元,如果有猜對的話就將答案的字元Map值歸零,如果猜錯的話就把猜錯的次數+1,如果超過7次直接輸出輸了,如果在七次內猜對就輸出贏了。如果結束For迴圈之後還沒有輸出任何東西,則代表半途而廢輸出指定的字串。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <map>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
while (cin >> N && N != -1)
{
string str;
cin >> str;
map<char, int>ans, guess;
for (int i = 0; i<str.length(); i++)
{
ans[str[i]] = 1;
}
cin >> str;
int count = 0;
bool chicken = true;
for (int i = 0; i<str.length(); i++)
{
if (ans[str[i]] == 1)
{
ans[str[i]] = 0;
count--;
}
if (guess[str[i]] == 0)
{
guess[str[i]]++;
count++;
}
if (count >= 7)
{
chicken = false;
cout << "Round " << N << "\n";
cout << "You lose.\n";
break;
}
bool ok = true;
for (auto it:ans)
{
if (it.second == 1)
{
ok = false;
break;
}
}
if (ok)
{
chicken = false;
cout << "Round " << N << "\n";
cout << "You win.\n";
break;
}
}
if (chicken && count < 7)
{
cout << "Round " << N << "\n";
cout << "You chickened out.\n";
}
}
}
留言
張貼留言