Uva489 刽子手游戏

写这个题目的时候我还没看题,同桌就十分兴奋地和我说这游戏她玩过,我就让她给我解释下题目的意思,她为我娓娓道来,她真是一个优秀的同桌。我觉得这个游戏十分有意思,名字如此血腥暴力,内容却如此和蔼可亲,我从未知道英语字母都可以玩出这样的花样。

刽子手游戏的规则是,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母显示出来,如果没有那个字母,则计算机会在一幅“刽子手画上添一笔。这幅画一共需要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");
	}
}

猜你喜欢

转载自blog.csdn.net/sincereO_o/article/details/81172294