思路:
开数据分别将其记录下来:一共需要判断多少次(母串的长度),再错多少次会输掉比赛,利用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;
}