489: Hangman Judge(AC)
Q489: Hangman Judge
Hangman Judge是一個猜英文單字的小遊戲(在電子字典中常會看到),遊戲規則如下:
- 答案單字寫在紙上(每個字元一張紙),並且被蓋起來,玩家每次猜一個英文字元(letter)。
- 如果這個英文字元猜中(在答案的英文單字中有出現),被猜中的字元就被翻開。例如:答案是book,如果你猜o,book中的兩個o就會被視為已猜中。
- 如果這個英文字元未出現在答案的單字中,就會在hangman的圖中多加一劃。要完成hangman圖共需7劃,如下圖。注意:同一個猜錯的字元只能再圖上畫一劃,例如:答案是book,第一次你猜a(未猜中)會在圖上畫一劃,但第二次以後再猜a並不會再多畫。
- 如果在hangman圖完成之前,玩家已猜中所有答案中的字元,則玩家贏(win)。
- 如果玩家尚未猜中所有答案中的字元而hangman圖完成了,,則玩家輸(lose)。
- 如果玩家在還沒輸贏的情況之下就不玩了,那我們說玩家膽小放棄了(chicken out).
______ | | | O | /|\ | | | / \ __|_ | |______ |_________|
你的任務就是要寫一個程式根據答案及玩家輸入的猜測來判斷玩家是贏、輸、或放棄。
Input
會有好幾組測試資料,每一組有3列。第一列為一個數字n,代表第幾回合,第二列為這一回合的答案,第三列為這一回合玩家輸入的猜測。如果 n = -1代表輸入結束。
Output
請輸出每一回合及遊戲結果。遊戲結果只有三種可能:
You win.
You lose.
You chickened out.
請參考sample output。
Sample input
1 cheese chese 2 cheese abcdefg 3 cheese abcdefgij -1
Sample Output
Round 1 You win. Round 2 You chickened out. Round 3 You lose.
以下是我的代码,欢迎交流
#include <iostream> #include <string.h> using namespace std; char word_table[128]; int main() { int iCase; char word[100]; char guess[100]; int error; int num_unique; while(cin>>iCase && iCase!= -1) { cin>>word>>guess; memset(word_table,0,sizeof word_table); error = 0; num_unique = 0; for(char *p = word ; *p ; ++p) { if(!word_table[*p]) { num_unique++; word_table[*p]++; } } for(char *p = guess ; *p ; ++p) { if(word_table[*p] == 1)//猜中 { --num_unique; if(!num_unique) { break; } word_table[*p]++; } else if(!word_table[*p])//猜错 { error++; if(error==7) break; } //else 重复猜中 忽略掉 } cout<<"Round "<<iCase<<endl; if(error == 7) { cout<<"You lose.\n"; } else if(num_unique == 0) { cout<<"You win.\n"; } else { cout<<"You chickened out.\n"; } } return 0; }