当前位置: 代码迷 >> 综合 >> UVA489 刽子手的游戏 Hangman Judge
  详细解决方案

UVA489 刽子手的游戏 Hangman Judge

热度:54   发布时间:2024-01-25 16:34:15.0

题目描述

PDF
在这里插入图片描述

输入格式

在这里插入图片描述

输出格式

在这里插入图片描述

题意翻译

刽子手游戏是一款猜单词游戏,计算机想一个单词让你猜,你每次可以猜一字母 如果单词里有那个字母,所有该字母会显示出来。(例如“book”,如果猜字母“o”,则两个o都会显示出来) 如果没有那个字母,则计算机会在一幅“刽子手”画上填一 笔。这幅画一共需要7 笔就能完成,因此你最多只能错6 次。

注意,猜一个已经猜过的字母也算错。在本题中,模拟这个过程,输入单词和玩家的猜测,判断结果。

输入若干组数据,每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。

输出每组对应两行,第一行为游戏编号,格式为“Round 局数”(无引号,中间有空格),第二行为游戏结果,如果玩家获胜,输出"You win.",如果玩家失败,输出"You lose.",如果参赛者没有猜到足够的字母就退出,输出"You chickened out."(句末有句点,无引号)

By @SocietyNiu

输入输出样例

输入 #1

1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1

输出 #1

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

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<cstdio>
#include <algorithm>
#include<map>
#include<sstream>
using namespace std;
#pragma warning(disable:4996)
#pragma warning(disable:6031)
#define maxn 100
int leftt, chance;//leftt表示s中的字母数,chance表示剩余次数
char s[maxn], s2[maxn];//s电脑出,s2猜测
int win, lose;//输赢void guess(char ch)
{int bad = 1;for (int i = 0; i < strlen(s); i++){if (s[i] == ch) {//一个个比对消除leftt--; s[i] = ' '; bad = 0;}}if (bad)--chance;if (!chance)lose = 1;//如果没有剩余出错次数->chance=0,就输了if (!leftt)win = 1;//如果s中的字母在s2中全有,就赢了
}int main()
{int rnd;while (scanf("%d%s%s",&rnd,s,s2)==3&&rnd!=-1){printf("Round %d\n",rnd);win = lose = 0;leftt = strlen(s);chance = 7;for (int i=0;i<strlen(s2);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;
}