7-6 简易连连看
题目描述:
本题要求实现一个简易连连看游戏模拟程序。
给定一个2N×2N的方阵网格游戏盘面,每个格子中放置一些符号。这些符号一定是成对出现的,同一个符号可能不止一对。程序读入玩家给出的一对位置(x1 ,y1 )、(x2 ,y2 ),判断这两个位置上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
输入格式:
输入在一行中给一个正整数N(<5)。随后2N行,每行2N个大写英文字母(其间以1个空格分隔),表示游戏盘面。盘面之后给出一个正整数K,随后K行,每行按照格式“x1 y1 x2 y2”给出一个玩家的输入。注意格子的行、列编号是从1到2N。
输出格式:
根据玩家的每一步输入,输出相应的结果。输出盘面时注意,每行字符间以1个空格分隔,行末不得有多余空格。
输入样例:
输出样例:
输入样例:
思路分析:
这道题并没有考什么算法与规律,只有字符串输入与字符串输出的问题,在考场A题的时候,没A出来,在考场外,尝试重新A,A出与样例一样,如果有错误或者建议,请大佬评论给一下,谢谢,废话不多说,直接上代码。
#include<stdio.h>
int main()
{
int a,b,c,x1,y1,x2,y2,x,y,m;
char c1[10][50],c2[10][50];
scanf("%d",&a);
m=a*a*4;
getchar();
for(b=1;b<=2*a;b++)
{
gets(c1[b]);
}
for(b=1;b<=2*a;b++)
{
int d=1;
for(c=0;c1[b][c]!='\0';c++)
{
if(c1[b][c]!=' ' && c1[b][c]!='\0')
{
c2[b][d]=c1[b][c];
d++;
}
}
}
int d=0;
scanf("%d",&y);
for(x=0;x<y;x++)
{
if(d==3)
{
printf("Game Over\n");
}
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(c2[x1][y1]==c2[x2][y2] && c2[x1][y1]!='*' && c2[x1][y1]!='*')
{
c2[x1][y1]='*';
c2[x2][y2]='*';
m-=2;
if(m!=0 && d!=3)
{
for(b=1;b<=2*a;b++)
{
for(c=1;c<=2*a;c++)
{
if(c!=2*a)
printf("%c ",c2[b][c]);
else
printf("%c",c2[b][c]);
}
printf("\n");
}
}
}
else if(m!=0 && c2[x1][y1]!=c2[x2][y2])
{
d++;
printf("Uh-oh\n");
}
else if(c2[x1][y1]=='*' && c2[x2][y2]=='*' && m!=0)
{
d++;
printf("Uh-oh\n");
}
}
if(m==0)
{
printf("Congratulations!");
}
return 0;
}