折纸游戏

来源:百度知道 编辑:UC知道 时间:2024/06/08 04:45:52
整张纸被分成m×m个格子,即构成一个方阵,每个格子里面都写了一个正整数。游戏分两步:首先左右对折,如果面对面相碰的格子中的数字都相同,那么就进行下一步操作,否则停止游戏,并回答游戏的结果是“NO”。而若能进行下一步操作,则就是先展开纸张,恢复原状,然后上下对折,如果面对面相碰的格子中的数字还相同,那么回答游戏的结果就是“YES”;否则就是“NO”了。很显然,如果不巧的话,中间的格子会碰不上其他格子,那就只好随它去了。为了让贝贝不致于失望,每次游戏都要让她有十足的胜算,哦,只有靠编程了,你行。

Input:
输入数据一上来就有一个整数n(n≤10),表示后面有n组数据。每组数据一开始,会有一个整数m表示后面有m*m个格子,格子中放有整数数据。
Output:
每组数据对应一个游戏,应根据格子中的数据值,回答要么“YES”要么“NO”,每个回答都是单独占一行的。
Sample Input:
2
3
1 2 1
3 5 3
1 2 1
4
2 1 1 2
1 2 3 4
4 3 2 1
2 1 1 2
Sample Output:
YES
NO

读数据的过程就不说了,我只给你写个判断YES NO的函数.

两次对折都相同,相当于斜上角四分之一矩形内的数字和其他区块的数字分别左右对称,上下对称和中心对称

//输入一个二维数组以及它的长度 若左右和上下对称则返回YES否则返回NO
String game(int data[][],int length)
{
//k,p用于存储a[i][j]对称数的下标
int i,j,k,p;
for(i=0;i<length/2;i++)
{
k=length-1-i;
for(j=0;j<length/2;j++)
{
p=width-1-j;
//中心对称
if(a[i][j]!=a[k][p])
return "NO";

//左右对称
if(a[i][j]!=a[i][p])
return "NO";

//上下对称
if(a[i][j]!=a[k][j])
return "NO";
}
}
return "YES";
}

Sorry ,I DON'T KNOW.