题目链接:https://vjudge.net/problem/UVA-489
题目大意:刽子手游戏其实是一款猜单词游戏。游戏规则是这样的:计算机想一个单词让你猜,你每次可以猜一个字母。如果单词里有那个字母,所有该字母会显示出来;如果没有那个字母,则计算机会在“刽子手”画上填一笔。这幅画一共需要七笔,因此你最多只能错六次。注意:猜一个已经猜过的字母也算错。
在本题中,你的任务是编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了(You win),输了(You lose),还是放弃了(You chickened out)。
解析:You chickened out代表你的猜测既没有完成游戏,也没有输了游戏。
我定义了一个数组arr来判断单词中字母是否被猜测过,猜对一次单词中字母,单词中该字母(所有)对应arr数组位置变为1(初始化为0)。猜错一次,cnt++,最后判断cnt是否大于等于7和arr数组是否全部都变为1.
1.cnt<7但是arr数组没有全变为1,You chickened out。
2.cnt<7并且arr数组全为1,You win。
3,cnt>7,You lose。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define maxn 100000
int main()
{
freopen("i.txt","r",stdin);
char s1[maxn], s2[maxn];
int arr[maxn];
int n, f1,cnt, f2, f3;
while(scanf("%d",&n) && n!=-1) {
memset(arr, 0, sizeof(arr));
printf("Round %d\n",n++);
scanf("%s%s",s1,s2);
cnt = 0, f2 = 0;
for(int i = 0; s2[i]; i++) {
f1 = 0,f3 = 0;
for(int j = 0; s1[j]; j++) {
if(s2[i]==s1[j] && !arr[j]) {
arr[j] = 1;
f1 = 1;
}
}
if(!f1) {
for(int j = 0; s1[j]; j++)
if (!arr[j]) f3 = 1;
if(f3) cnt++;
}
}
for(int i = 0; s1[i]; i++)
if (!arr[i]) f2 = 1;
if(cnt<7 && !f2) printf("You win.\n");
else if(cnt<7 && f2) printf("You chickened out.\n");
else if(cnt>=7) printf("You lose.\n");
}
}