首页 > 试题广场 >

对称矩阵

[编程题]对称矩阵
  • 热度指数:9986 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个N维矩阵,判断是否对称。

输入描述:
输入第一行包括一个数:N(1<=N<=100),表示矩阵的维数。
接下来的N行,每行包括N个数,表示N*N矩阵的元素。


输出描述:
可能有多组测试数据,对于每组数据,
输出"Yes!”表示矩阵为对称矩阵。
输出"No!”表示矩阵不是对称矩阵。
示例1

输入

4
16 19 16 6 
19 16 14 5 
16 14 16 3 
6 5 3 16 
2
1 2
3 4

输出

Yes!
No!
#include<iostream>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int a[101][101];
        int i,j;
        //输入数据
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                scanf("%d",&a[i][j]);
        //判断对称
        int flag=1;
        for(i=0;i<n;i++)
        {
            for(j=i;j<n;j++)
            {
                if(a[i][j]!=a[j][i])
                {
                    flag=0;
                    break;
                }
            }
        }
        if(flag==1)
            printf("Yes!\n");
        else
            printf("No!\n");
         
    }
    return 0;
}


发表于 2016-08-23 09:51:03 回复(0)
#include<stdio.h>
int main()
{
    int a[100][100],N,i,j;
    while(scanf("%d",&N)!=EOF)
    {
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
        for(i=0;i<N;i++)
            for(j=i+1;j<N;j++)
                if(a[i][j]!=a[j][i])
            {
                j=N-1;
                i=N;
            }
            if(i==N) printf("Yes!\n");
            else printf("No!\n");
    }
    return 0;
}
发表于 2018-01-01 10:03:57 回复(1)

python solution:

常规解法

while True:
    try:
        a, matrix = int(input()), []
        for i in range(a):
            matrix.append(input().split())
        res=True
        for i in range(a):
            for j in range(a):
                if matrix[i][j]!=matrix[j][i]:
                    res=False
                    break
        print("Yes!" if res else "No!")
    except:
        break

使用zip函数:

while True:
    try:
        a, matrix = int(input()), []
        for i in range(a):
            matrix.append(tuple(input().split()))

        print("Yes!" if matrix==list(zip(*matrix)) else "No!")
    except:
        break

注意,python3中要在前面加个list将zip object转为数组,如果是python2就不用加。

编辑于 2017-10-17 09:24:43 回复(1)
#include<stdio.h>//判断是否对称a[i][j]==a[j][i]
int main()
{
    int n,a[100][100],i,j,key;
    scanf("%d",&n);//输入
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    key=1;
    for(i=0;i<n;i++)//遍历
        for(j=i+1;j<n;j++)//直接对比上三角优化运行时间
            if(a[i][j]!=a[j][i])
            {
                key=0;break;
            }
    if(key) printf("Yes!");
    else   printf("No!");
}

发表于 2020-03-30 15:42:37 回复(0)
#include <iostream>

using namespace std;

int main()
{
    int N,flag=0;
    cin>>N;
    int **arr=new int*[N];
    for(int i=0;i<N;++i){
        arr[i]=new int[N];
        for(int j=0;j<N;++j)
            cin>>(arr[i])[j];
    }

    for(int i=0;i<N;++i){
        for(int j=0;j<i;++j){
            if((arr[i])[j]!=(arr[j])[i]){
                ++flag;
                break;
            }
        }
    }
    if(flag==0)
        cout<<"Yes!"<<endl;
    else
        cout<<"No!"<<endl;
    for(int i=0;i<N;++i)
        delete [] arr[i];
    delete [] arr;
    return 0;
}

编辑于 2020-03-11 16:07:08 回复(0)
#include <stdio.h>

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int a[n][n],flag=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
                if(i>j && flag==0)
                {
                    if(a[i][j]!=a[j][i])flag=1;
                }
            }
        }
        if(flag)printf("No!\n");
        else printf("Yes!\n");
    }
}

发表于 2020-02-11 00:35:55 回复(0)


int
#include <stdio.h>
#include <stdlib.h>
#define N 100
int judge(int a[][N],int n);
int main()
{
   int a[N][N];
   int n;
   while(scanf("%d",&n)!=EOF)
   {
       for(int i=0;i<n;i++)
       {
           for(int j=0;j<n;j++)
           {
               scanf("%d",&a[i][j]);
           }
       }
       if(judge(a,n)==1)
       {
           printf("Yes!\n");
       }
       else
       {
           printf("No!\n");
       }

   }
    return 0;
}
int judge(int a[][N],int n)
{
    int k=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(i!=j)
            {
                if(a[i][j]==a[j][i])
                {
                    k++;
                }
            }

        }
    }
    if(k==n*n-n)return 1;
    else return 0;
}


编辑于 2020-01-30 14:06:30 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        int **a=new int*[n];
        for(int i=0;i<n;i++)
            a[i]=new int[n];
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                cin>>a[i][j];
        bool judge=1;
        for(int i=0;i<n&&judge;i++)
            for(int j=i;j<n;j++)
                if(a[i][j]!=a[j][i]){
                    cout<<"No!"<<endl;
                    judge=0;
                    break;
                }
        if(judge)
            cout<<"Yes!"<<endl;
    }
}

发表于 2020-01-16 10:12:06 回复(0)
#include<stdio.h>
#include<stdlib.h>
#define N 1000
int main(){
    int n,i,j;
    int a[N][N];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++){
            if(a[i][j]!=a[j][i]){
                printf("No!");
                break;
            }
        }
        if(a[i][j]!=a[j][i]){
                break;
            }
    }
    if(i==n){
        printf("Yes!");
    }
    return 0;
}
发表于 2020-01-05 20:45:31 回复(0)
#include<bits/stdc++.h>
int a[101][101];
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%d",&a[i][j]);
        int k=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++)
                if(a[i][j]!=a[j][i]){
                    printf("No!\n");
                    k=1;break;
                }
            if(k==1)break;
        }
        if(k==0)printf("Yes!\n");
    }
}
发表于 2019-03-28 19:30:20 回复(0)
主要就是设置一个flag
#include <iostream>
#include <cstdio>
int num[101][101];
using namespace std;
int main(){
    int n;
    
    while(cin>>n){
        for(int i = 0;i < n;i++)
            for(int j = 0;j < n;j++)
                cin>>num[i][j];
        bool flag = true;
        for(int i = 0;i < n;i++){
            for(int j = i+1;j < n;j++){
                if(num[i][j]!=num[j][i]){
                    flag = false;
                    break;
                }
            }
        }
        if(flag)
            cout<<"Yes!"<<endl;
        else
            cout<<"No!"<<endl;
    }
    return 0;
}

编辑于 2019-02-09 13:50:18 回复(0)
#include<stdio.h>
const int maxn=110;
int A[maxn][maxn];
int main()
{
    int N;
    while(scanf("%d",&N)!=EOF){
            for(int i=0;i<N;i++){
                for(int j=0;j<N;j++){
                    scanf("%d",&A[i][j]);
                }
            }int flag=1;
            for(int i=0;i<N;i++){
                for(int j=i+1;j<N;j++){
                    if(A[i][j]!=A[j][i]){
                            flag=0;break;
                    }
                    if(flag==0) break;
                }
            }
            if(flag==1) printf("Yes!\n");
            else printf("No!\n");
    }
    return 0;
}

发表于 2019-01-11 20:29:09 回复(0)
#include <iostream>
using namespace std;
 
int main(){
    int matrix[101][101],n;
    while(cin>>n){
        int i,j;
        bool flag=true;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                cin>>matrix[i][j];
        for(i=0;i<n;i++){           
            for(j=0;j<n;j++){
                if(matrix[i][j]!=matrix[j][i]){
                    flag=false;
                    break;
                }
            }
        }
        if(flag) cout<<"Yes!"<<endl;
        else cout<<"No!"<<endl;
    }
    return 0;
}
发表于 2017-12-09 16:41:47 回复(0)
#include<stdio.h>
#define BUFFERSIZE 100
int main(void) {
    int array[BUFFERSIZE][BUFFERSIZE] = {0};
    int len = 0;
    while (fscanf(stdin, "%d", &len) != EOF) {
        for (int row = 0; row < len; row++)
        {
            for (int column = 0; column < len; column++)
                fscanf(stdin, "%d", &array[row][column]);
        }
        bool flag = 1;
        for (int row = 0; row < len; row++)
        {
            for (int column = 0; column < len; column++)
            {
                if (array[row][column] != array[column][row])
                {
                    flag = 0;
                    break;
                }
            }
        }
        if (flag == 0) fprintf(stdout, "No!\n");
        else    fprintf(stdout, "Yes!\n");
    }
    return 0;
}
编辑于 2017-03-22 21:00:11 回复(0)
#include <iostream>
using namespace std;
int main() {
    int N;
    while (cin >> N) {
        int arr[N][N], flag = 0; //flag为对称标记,默认为0对称
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++) {
                cin >> arr[i][j];
                if ((i >0 && j < i) && arr[i][j] != arr[j][i])
                    flag = 1; //若所输入的元素已有输入的对称元素,即检查是否一致 
            }
        if (flag)
            cout << "No!" << endl;
        else
            cout << "Yes!" << endl;
    }
}

编辑于 2017-02-11 10:55:12 回复(0)
try:
    while 1:
        m = []
        for _ in range(input()):
            m.append(tuple(raw_input().split()))
        print 'Yes!' if m == zip(*m) else 'No!'
except:
    pass

发表于 2016-12-23 09:28:02 回复(0)
package com.speical.first;

import java.util.Scanner;

/**
 * 判断对称矩阵
 * 
 * 注意我的循环的边界条件,对角线是不用参与比较,所以去掉
 * @author Special
 * @time 2018/02/10 17:28:02
 */
public class Pro217 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        while(input.hasNext()) {
            int n = input.nextInt();
            int[][] nums = new int[n][n];
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < n; j++) {
                    nums[i][j] = input.nextInt();
                }
            }
            boolean flag = true;
            for(int i = 1; i < n; i++) {
                for(int j = 0; j < n - 1; j++) {
                    if(nums[i][j] != nums[j][i]) {
                        flag = false;
                        break;
                    }
                }
            }
            System.out.println(flag ? "Yes!" : "No!");
        }
    }

}
发表于 2018-02-10 17:35:00 回复(0)
#include <array>
#include <iostream>
using namespace std;

array<array<int, 100>, 100>matrix;

int main() {
    int n;
    while (cin >> n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cin >> matrix[i][j];
            }
        }
        bool flag = true;   //判断对称
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (matrix[i][j] != matrix[j][i]) {
                    flag = false;
                }
            }
            if (!flag) {
                break;
            }
        }
        cout << (flag ? "Yes!" : "No!") << endl;
    }
    return 0;
}

编辑于 2024-03-11 18:39:07 回复(0)
#include <stdio.h>

int main() {
    int n;
    while(scanf("%d",&n)!=EOF){
    int a[n][n];
    int tag=1;
    int temp;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            if(a[i][j]!=a[j][i]){
                tag=0;break;
            }
            
        }if(tag==0)break;
    }
    if(tag==1)printf("Yes!\n");
    else{printf("No!\n");}
    }
    return 0;
}

发表于 2024-03-03 03:08:10 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        int arr[100][100];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cin >> arr[i][j];
            }
        }
        bool flag = true;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (arr[i][j] != arr[j][i]) {
                    flag = false;
                    break;
                }
            }
            if (!flag) {
                break;
            }
        }
        if (flag) {
            cout << "Yes!" << endl;
        }
        else {
            cout << "No!" << endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

发表于 2024-01-19 10:58:57 回复(0)

问题信息

难度:
96条回答 9185浏览

热门推荐

通过挑战的用户

查看代码