Uva489
In “Hangman Judge,” you are to write a program that judges a series of Hangman games. For each game, the answer to the puzzle is given as well as the guesses. Rules are the same as the classic game of hangman, and are given as follows: 1. The contestant tries to solve to puzzle by guessing one letter at a time. 2. Every time a guess is correct, all the characters in the word that match the guess will be “turned over.” For example, if your guess is ‘o’ and the word is “book”, then both ‘o’s in the solution will be counted as “solved”. 3. Every time a wrong guess is made, a stroke will be added to the drawing of a hangman, which needs 7 strokes to complete. Each unique wrong guess only counts against the contestant once.
______ | | | O | /|\ | | | / \ __|_ | |______ |_________|
4. If the drawing of the hangman is completed before the contestant has successfully guessed all the characters of the word, the contestant loses. 5. If the contestant has guessed all the characters of the word before the drawing is complete, the contestant wins the game. 6. If the contestant does not guess enough letters to either win or lose, the contestant chickens out. Your task as the “Hangman Judge” is to determine, for each game, whether the contestant wins, loses, or fails to finish a game. Input Your program will be given a series of inputs regarding the status of a game. All input will be in lower case. The first line of each section will contain a number to indicate which round of the game is being played; the next line will be the solution to the puzzle; the last line is a sequence of the guesses made by the contestant. A round number of ‘-1’ would indicate the end of all games (and input). Output The output of your program is to indicate which round of the game the contestant is currently playing as well as the result of the game. There are three possible results: You win. You lose. You chickened out.
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.
1 #include<bits/stdc++.h> 2 #define maxn 105 3 using namespace std; 4 char s[maxn],h[maxn]; 5 int n,len,chance; 6 int win,lose; 7 void guess(char ch) 8 { 9 int bad=0; 10 for(int i=0;i<strlen(s);i++) 11 { 12 if(ch==s[i]) 13 { 14 bad=1; 15 len--;//判断win 16 s[i]=' '; 17 } 18 } 19 if(!bad) 20 chance--; 21 if(!chance)lose=1; 22 if(!len)win=1; 23 } 24 int main() 25 { 26 while(scanf("%d%s%s",&n,s,h)==3,n!=-1) 27 { 28 printf("Round %d\n",n); 29 win=lose=0; 30 len=strlen(s); 31 chance=7; 32 for(int i=0;i<strlen(h);i++) 33 { 34 guess(h[i]); 35 if(lose||win)break; 36 } 37 if(lose)printf("You lose.\n"); 38 else if(win)printf("You win.\n"); 39 else printf("You chickened out.\n"); 40 } 41 return 0; 42 }
题意:
模拟一个猜词游戏的裁判器。每次猜一个字母,如果猜对该字母会显示出来,猜错七次算输,猜错[0,6]次内把正确字母都猜出来算赢,如果未输未赢情况下放弃猜测那么算放弃猜测。
注意点:
思路简单,倒是有几个注意点。
1.小人为七笔画,0笔时错0次,1笔时错1次··· ···,7笔时输了。一开始chance写成6了,WA了。
2.巧妙的方法,利用len的大小来判断是否win,当len==0说明所有的字母都猜测到了。被判断过有的字母要置空,防止影响后面的判断,每一次都要遍历全部的长度,防止后面还有一样的字母没有置空。for(int i=0;i<strlen(s);i++)遍历全部长度的时候,注意不要用len,而要用strlen(s) 因为,len的长度是不断改变的。