ZeroJudge D217: Hangman Judge

題目敘述

本題採用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";
        }
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge M932: 蜜蜂觀察