大家帮忙来看看
fans喜欢玩折纸游戏。整张纸被分成m*m个格子,即构成一个方阵,每个格子里面都写了一个正整数。游戏分两步:首先左右对折,如果对应的格子的数字都相同,那么进行下一步操作;否则停止游戏,此时游戏的结果是"no"。然后上下对折,如果对应的格子的数字相同,那么游戏的结果是“yes”;否则停止游戏,游戏的的结果是"no"。Input:
第一个数为方阵的个数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
本人菜鸟写的程序:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; ++i)
{
int m;
cin>>m;
int **a=new int*[m];
for(int j=0; j<m; j++)
{
a[j]=new int[m];
for(int p=0; p<m; p++)
cin>>a[j][p];
}
int y=0,t=0;
if(m%2==0)
y=1;
for(int x=0; x<=m/2-y; x++)
{
for(int q=0; q<=m/2-y; q++)
{
if(a[x][q]!=a[x][m-1-q]||a[x][m-1-q]!=a[m-1-x][q]||a[m-1-x][q]!=a[m-1-x][m-1-q])
{
cout<<"no"<<"\n";
t=1;
break;
}
}
if(t==1)
break;
}
if(t==0)
cout<<"yes"<<"\n";
}
return 0;
}
个人感觉比较繁琐,不知道哪些地方可以优化,尤其循环判断的那一环节。。。