数组-12. 简易连连看(20)

来源:互联网 发布:好用的网络机顶盒 编辑:程序博客网 时间:2024/06/11 20:07

数组-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:
2I T I TY T I AT A T YI K K T111 1 1 34 2 4 33 1 4 22 2 1 23 1 2 44 4 3 12 1 3 43 3 1 44 1 2 32 4 3 21 1 2 2
输出样例1:
* T * TY T I AT A T YI K K T* T * TY T I AT A T YI * * TUh-oh* * * TY * I AT A T YI * * TUh-oh* * * TY * I A* A T YI * * ** * * T* * I A* A T *I * * ** * * ** * I A* A * *I * * ** * * ** * * A* A * ** * * *Congratulations!
输入样例2:
2I T I TY T I AT A T YI K K T51 1 4 41 1 2 31 1 2 32 2 4 12 2 3 3
输出样例2:
Uh-oh* T I TY T * AT A T YI K K TUh-ohUh-ohGame Over






#include <cstdio>#include <iostream>#define MAX 10using namespace std;void print(char ch[MAX][MAX],int N){int sign;for(int i=1;i<=2*N;++i){sign=0;for(int j=1;j<=2*N;++j){printf("%c",ch[i][j]);if(++sign<2*N){printf(" ");}}printf("\n");}}int main(){int N;scanf("%d",&N);char ch[MAX][MAX]={0};for(int i=1;i<=2*N;++i){for(int j=1;j<=2*N;++j){cin >> ch[i][j];//scanf("%c", &ch[i][j]);//用scanf导致空格和换行各种混淆//cin会根据对象类型进行智能赋值,不会把空格换行读入!}}int K;cin >> K;int sum=0;//错误次数int count=0;//消去次数,用次数,否则每次都去判断是否全部消去太费时while(K--){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);if(ch[x1][y1]==ch[x2][y2]&&ch[x1][y1]!='*'&&ch[x2][y2]!='*'){//一开始忘了消去以后的相等是不算的!ch[x1][y1]=ch[x2][y2]='*';++count;if(count==2*N*N){cout<< "Congratulations!"<<endl;break;}print(ch,N);}else{printf("Uh-oh\n");++sum;}if(sum>=3){cout << "Game Over"<<endl;break;}}return 0;}


0 0
原创粉丝点击