输入一个整数n及一个n阶方阵,判断该方阵是否以主对角线对称,输出“Yes”或“No”。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组数据的第一行输入一个整数n(1<n<100),接下来输入n阶方阵(共n行,每行n个整数)。
输出格式:
对于每组测试,若该方阵以主对角线对称,则输出“Yes”,否则输出“No”。引号不必输出。
输入样例:
1
4
1 2 3 4
2 9 4 5
3 4 8 6
4 5 6 7
输出样例:
Yes
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
- 首先,从输入测试数据的组数
T
。 - 在每一组测试数据中:
- 定义一个变量
flag
并初始化为 1,用于记录方阵是否以主对角线对称。 - 从输入方阵的阶数
n
。 - 定义一个
n x n
的二维数组a
来存储方阵元素。 - 使用两个嵌套循环读取方阵的元素值,并将其存储在数组
a
中。 - 使用两个嵌套循环遍历方阵的上三角部分,即
i
从0
到n-1
,j
从i+1
到n-1
。- 如果方阵的对称位置的元素不相等,则将
flag
设置为 0,表示不是以主对角线对称。
- 如果方阵的对称位置的元素不相等,则将
- 根据
flag
的值输出结果,如果flag
为 1,则输出 "Yes",否则输出 "No"。
- 定义一个变量
代码
#include<stdio.h>
int main( )
{
int T,n,i,j;
scanf("%d",&T);
while(T--)
{
int flag=1; // 初始化 flag 为 1,表示方阵以主对角线对称
scanf("%d",&n);
int a[n][n];
// 使用两个嵌套循环读取方阵的元素值,并将其存储在数组 a 中
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
// 使用两个嵌套循环遍历方阵的上三角部分,即 i 从 0 到 n-1,j 从 i+1 到 n-1
// 如果方阵的对称位置的元素不相等,则将 flag 设置为 0,表示不是以主对角线对称
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i][j]!=a[j][i])
flag=0;
}
}
// 根据 flag 的值输出结果,如果 flag 为 1,则输出 "Yes",否则输出 "No"
if(flag==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}