刽子手游戏(Hangman Judge, UVa 489)

刽子手游戏其实是一款猜单词游戏,游戏规则是这样的:计算机想一个单词让你猜,你每次可以猜一个字母。如果单词里有那个字母,所有该字母会显示出来;如果没有那个字母,则计算机会在一幅“刽子手”画上填一笔。这幅画一共需要7笔就能完成,因此你最多只能错6次。注意,猜一个已经猜过的字母也算错。

在本题中,你的任务是编写一个“裁判”程 序,输入单词和玩家的猜测,判断玩家赢了 (You win.)、输了(You lose.)还是放弃了 (You chickened out.)。每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。

样例输入:

1

cheese

chese

2

cheese

abcdefg

3

cheese

abcdefgij

-1

样例输出:

Round 1

You win.

Round 2

You chickened out.

Round 3

You lose.

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10010
int    left,chance;  
char s1[maxn],s2[maxn]; 
int win,lose; 
void guess(char a){ 
    int flag=0;
    for(int i=0;i<strlen(s1);i++){
        if(a==s1[i]) {
            s1[i]=' ',left--;
            flag=1;
        }    
    }
    if(!flag) chance--;
    if(!left) win=1;
    if(!chance) lose=1;
}
int main(){
    int count=0;
    while(1){
        scanf("%d",&count);        
        if(count==-1) break;
        scanf("%s%s",s1,s2);
        win=0;
        lose=0;
        printf("Round %d
",count);
        int n=strlen(s2);
        left=strlen(s1);
        //printf("%d
",left);
        chance=7;
        for(int i=0;i<n;i++){
            guess(s2[i]);
            if(lose||win) break;
        } 
        //guess(s1,s2);
        if(win)printf("You win.
");
        else if(lose) printf("You lose.
");
        else printf("You chickened out.
");
    }
    return 0;
} 
原文地址:https://www.cnblogs.com/LOW-ctfer/p/10387779.html