ello,点进来的小伙伴们,你们好呐!
系列专栏:【牛客刷题】
作者简介:一名双非本科的在读大三小白,我很平凡,学会努力!
给大家推荐一个超级好用的刷题平台——牛客网!
一、判断双对称方阵
对于一个n阶方阵,请判断该方阵是否双对称,即既左右对称又上下对称。若是则输出“yes”,否则输出“no”。例如,样例中,以第2列为界则左右对称,以第2行为界则上下对称,因此输出“yes”。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组数据的第一行输入方阵的阶n(2≤n≤50),接下来输入n行,每行n个整数,表示方阵中的元素。
输出格式:
对于每组测试数据,若该方阵双对称,则输出“yes”,否则输出“no”。注意,引号不必输出。
输入样例:
2
3
1 2 1
3 5 3
1 4 1
3
1 2 1
3 5 3
1 2 1
输出样例:
no
yes
解题思路:我们发现题目要求我们的矩阵必须是上下对称 并且 左右也对称 ,那么我们可以想到二维数组遍历的方法,分别比较首行 末行 首列 末列,然后通过循环比较第二行和n-2行 ,第二列和 m-2列,依次类推,设立两个flag 最后通过flag的数值来判断输出yes还是no。
#include<stdio.h>
int main() {
int a[100][100],i,j,k,m,n;
scanf("%d",&m);
for(i=0; i<m; i++) {
scanf("%d",&n);
for(j=0; j<n; j++)
for(k=0; k<n; k++)
scanf("%d",&a[j][k]);
int flag=0;
int flag2=0;
for(j=0; j<n/2; j++) {
for(k=0; k<n; k++)
if(a[j][k]!=a[n-1-j][k]) {
flag=1;
break;
}
if(flag==1) {
break;
}
}
for(j=0; j<n; j++)
{
for(k=0; k<n/2; k++)
if(a[j][k]!=a[j][n-1-k]) {
flag2=1;
break;
}
if(flag2==1){
break;
}
}
if(flag!=1 && flag2!=1){
printf("yes\n");
}
else{
printf("no\n");
}
flag=0;
flag2=0;
}
return 0;
}