Hangman Judge

在这里插入图片描述
思路:
开数据分别将其记录下来:一共需要判断多少次(母串的长度),再错多少次会输掉比赛,利用win和lose来记录输赢情况,根据情况进行输出三种答案
1.left = strlen(s1) *(母串的长度就是判断的次数)
2.chance = 7(用来记录一下目前能错的剩余的次数)
3.s[i] = ' '的作用是用来表示这个已经被匹配成功了,因为题干里面说如果重复出现已经匹配的字符也算未匹配,所以不用开数组记录匹配情况,直接将已经匹配成功的赋值为空格即可。
代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int N = 101;
char s[N], s1[N];
int left, chance, win, lose;
int n;

void guess(char ch) {
	int bad = 1;//利用bad来标记是否已匹配
	for (int i = 0; i < strlen(s); i++)
		if (ch == s[i]) { left--; s[i] == ' '; bad = 0; }
	if (bad) chance--;
	if (!left) win = 1;
	if (!chance) lose = 1;
}

int main() {
	while (scanf("%d%s%s", &n, s, s1) == 3 && n != -1) {
		printf("Round %d\n", n);
		win = lose = 0;
		chance = 7;
		left = strlen(s);
		for (int i = 0; i < strlen(s1); i++) {
			guess(s1[i]);
			if (win || lose) break; //判断结束的条件,当win和lose有一个不是0的时候说明已经能分出输赢了(根据guess函数的代码可知)
		}
		if (win) printf("You win.\n"); //win和lose的作用就是用来标记的,只要作用是在guess函数中进行处理来达到标记的效果
		else if (lose) printf("You lose.\n");
		else printf("You chickened out.\n");
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值