写这个题目的时候我还没看题,同桌就十分兴奋地和我说这游戏她玩过,我就让她给我解释下题目的意思,她为我娓娓道来,她真是一个优秀的同桌。我觉得这个游戏十分有意思,名字如此血腥暴力,内容却如此和蔼可亲,我从未知道英语字母都可以玩出这样的花样。
刽子手游戏的规则是,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母显示出来,如果没有那个字母,则计算机会在一幅“刽子手画上添一笔。这幅画一共需要7笔就能完成,因此你最多只能错6次,注意,猜一个已经猜过的字母也算错,但是不计入错误次数。我要变一个裁判程序,输入单词和玩家猜测,判断玩家赢了或输了还是放弃了。每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测,后两行保证只含小写字母。
Sample Input
1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1
Sample Output
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.
下面是见证奇迹的时刻……
#include<stdio.h>
#include<string.h>
char s1[105],s2[105];
int main()
{
int p,n1,n2,t,a[26];
int i,j,k;
while(scanf("%d",&p)!=EOF)
{
if(p==-1) //读取到-1结束输入
break;
scanf("%s",s1);
scanf("%s",s2);
memset(a,0,sizeof(a)); //数组初始化为0
n1=strlen(s1);
n2=strlen(s2);
int s=0,f1=1;
for(i=0;i<n2;i++)
{
int f=0;
if(a[s2[i]-'a']==0) //在玩家猜测中第一次出现的字母相对应的数组存的一定是0
{
for(j=0;j<n1;j++)
{
if(s1[j]==s2[i]) //玩家猜的字母单词里有
{
s1[j]='0'; //把所有和玩家猜的字母一样的字母变成0
if(a[s2[i]-'a']==0) //……我也不知道干什么的
{
f=1;
}
}
}
a[s2[i]-'a']=1; //表示该单词玩家已经猜过
if(f==0) //猜错了
s++;
}
else
continue;
int f11=0;
for(int k=0;k<n1;k++) //判断还有没有单词没猜过
{
if(s1[k]!='0')
f11=1;
}
if(f11==0)
{
f1=1;
break;
}
if(s>6) //错了第7次了,输了
{
f1=0;
}
}
for(i=0;i<n1;i++)
{
if(s1[i]!='0')
f1=0;
}
printf("Round %d\n",p);
if(f1==1 && s<=6)
printf("You win.\n");
else if(s<=6)
printf("You chickened out.\n");
else
printf("You lose.\n");
}
}