UVa489 - Hangman Judge 题解

题目

题目链接

UVa489 - Hangman Judge

题目大意

给1个单词,然后让猜测其中的字符。只要猜测其中存在的字符就好。共有7次猜测机会。

请你写一个裁判程序,判断猜测是否成功。

输入

输入由多个测试情况组成。

每个测试情况的第一行输入第x个测试情况。第二行为正确答案,第三行为猜测。

当x=-1时表示输入结束

输出

每行输出对应一个测试情况。

如果猜测正确则输出"You win."

如果猜测失败则输出"You lose."

如果放弃猜测则输出"You chickened out."

样例输入

1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1

样例输出

Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.

题解

对于猜测序列,逐个判断字符就好了。关键是如何判断这个字符为重复出现的?

只需要让答案序列里猜测过的字符变为空格就ok。

Then show the code.

#include <stdio.h>
#include <string.h>

char s1[256], s2[256];
//left 还需要猜测几个字符就成功
//chance 剩余猜测次数
int win, lose, left, chance;

void guess(char ch){
    int bad = 1;
    int len = strlen(s1);
    for(int i=0; i<len; i++)
        if(ch == s1[i]){
            left--; bad = 0;
            s1[i] = ' ';
        }
    if(bad) chance--;
    if(!left) win = 1;
    if(!chance) lose = 1;
}

int main(){
    int rnd;
    while(scanf("%d", &rnd) == 1 && rnd != -1){
        scanf("%s%s", s1, s2);
        printf("Round %d\n", rnd);
        win = lose = 0;
        left = strlen(s1);
        chance = 7;
        int len = strlen(s2);
        for(int i=0; i<len; i++){
            guess(s2[i]);
            if(win || lose) break;
        }
        if(win) printf("You win.\n");
        else if(lose) printf("You lose.\n");
        else printf("You chickened out.\n");
    }

    return 0;
}
posted @ 2020-11-16 20:42  1v7w  阅读(145)  评论(0编辑  收藏  举报