数组-12. 简易连连看(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈建海(浙江大学)
本题要求实现一个简易连连看游戏模拟程序。
给定一个2Nx2N的方阵网格游戏盘面,每个格子中放置一些符号。这些符号一定是成对出现的,同一个符号可能不止一对。程序读入玩家给出的一对位置(x1, y1)、(x2, y2),判断这两个位置上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
输入格式:
输入在一行中给一个正整数N(<5)。随后2N行,每行2N个大写英文字母(其间以1个空格分隔),表示游戏盘面。盘面之后给出一个正整数K,随后K行,每行按照格式“x1 y1 x2 y2”给出一个玩家的输入。注意格子的行、列编号是从1到2N。
输出格式:
根据玩家的每一步输入,输出相应的结果。输出盘面时注意,每行字符间以1个空格分隔,行末不得有多余空格。
输入样例1:2 I T I T Y T I A T A T Y I K K T 11 1 1 1 3 4 2 4 3 3 1 4 2 2 2 1 2 3 1 2 4 4 4 3 1 2 1 3 4 3 3 1 4 4 1 2 3 2 4 3 2 1 1 2 2输出样例1:
* T * T Y T I A T A T Y I K K T * T * T Y T I A T A T Y I * * T Uh-oh * * * T Y * I A T A T Y I * * T Uh-oh * * * T Y * I A * A T Y I * * * * * * T * * I A * A T * I * * * * * * * * * I A * A * * I * * * * * * * * * * A * A * * * * * * Congratulations!输入样例2:
2 I T I T Y T I A T A T Y I K K T 5 1 1 4 4 1 1 2 3 1 1 2 3 2 2 4 1 2 2 3 3输出样例2:
Uh-oh * T I T Y T * A T A T Y I K K T Uh-oh Uh-oh Game Over
1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 #include<string.h> 5 int main() 6 { 7 int n, t = 0, f = 0, i, j; 8 char a[20][20]; 9 scanf("%d", &n); 10 getchar(); 11 for(i = 0; i < 2*n; i++) 12 { 13 scanf("%c", &a[i][0]); 14 for(j = 1; j < 2*n; j++) 15 scanf(" %c", &a[i][j]); 16 getchar(); 17 } 18 int k, l, x1, y1, x2, y2, flag = 0; 19 scanf("%d", &k); 20 for(i = 0; i < k; i++) 21 { 22 scanf("%d%d%d%d", &x1, &y1, &x2, &y2); 23 if(flag) 24 { 25 printf("Game Over "); 26 break; 27 } 28 else if(a[x1-1][y1-1] == a[x2-1][y2-1] && a[x1-1][y1-1] != '*') 29 { 30 t++; 31 if(t == 2*n*n) 32 { 33 printf("Congratulations! "); 34 break; 35 } 36 else 37 { 38 a[x1-1][y1-1] = a[x2-1][y2-1] = '*'; 39 for(j = 0; j < 2*n; j++) 40 { 41 printf("%c", a[j][0]); 42 for(l = 1; l < 2*n; l++) 43 printf(" %c", a[j][l]); 44 printf(" "); 45 } 46 } 47 } 48 else 49 { 50 f++; 51 printf("Uh-oh "); 52 if(f == 3) 53 flag = 1; 54 } 55 } 56 57 return 0; 58 }