UVA489 刽子手的游戏 Hangman Judge

题目描述

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;
}
发布了53 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/YUEXILIULI/article/details/104025208