2015年7月28日 星期二

[UVA] 489 - Hangman Judge

題意:
猜單字小遊戲,猜錯7次就輸了,猜錯7次以內猜對單字算贏,不然就算放棄。
同一個字母猜兩次不算錯。

解題:
用anscnt表示答案有幾種字母,
例如:AAB 這樣算A和B兩種
開一個字母表等於1表示是答案中的字母,
猜字母的時候去看字母表,
是1表示猜對,把字母表的1變成2,guesscnt++;
是0表示猜錯,wrong++
如果anscnt==guesscnt表示所有字母都猜對了,
就跳出迴圈不用繼續比囉

例如:
答案:abc
猜  :abcdfgertyuioptrewqwertylkj
輸出:You win.


/* 20150729
 * hanting
 * UVa 489 - Hangman Judge
 * C++
 */
#include <iostream>
using namespace std;
int main()
{
    int N;
    while(cin>>N and N!=-1)
    {
        string ans;
        string guess;
        cin>>ans>>guess;
        int AnsTable[123]={0};
        int AnsCnt=0,GuessCnt=0;
        for(int i=0;i<ans.size();i++)
        {
            int ch=ans[i];
            if(!AnsTable[ch])
            {
                AnsTable[ch]=1;
                AnsCnt++;
            }
        }
        int wrong=0;
        for(int i=0;i<guess.size() and AnsCnt!=GuessCnt;i++)
        {
            int ch=guess[i];
            if(AnsTable[ch]==0)
            {
                wrong++;
            }
            else if(AnsTable[ch]==1)
            {
                AnsTable[ch]++;
                GuessCnt++;
            }
        }
        bool Win=AnsCnt==GuessCnt;
        cout<<"Round "<<N<<endl;
        if(wrong<7)
        {
            if(Win) cout<<"You win."<<endl;
            else cout<<"You chickened out."<<endl;
        }
        else
            cout<<"You lose."<<endl;
    }

    return 0;
}

沒有留言:

張貼留言