Проверьте, симметрична ли эта матрица относительно главной диагонали - PullRequest
0 голосов
/ 09 ноября 2018

Дано число n, не превышающее 10, и матрица размером n × n. Проверьте, является ли эта матрица симметричной относительно главной диагонали. Выведите слово «YES», если оно симметричное, и слово «NO» в противном случае.

Это мой код, к сожалению, он не работает. Пожалуйста, объясните мне, как это сделать правильно:)

public class Main { public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int n= scanner.nextInt();
    int[][] number = new int[n][n];
    boolean ismatch = false;

    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        number[i][j] = scanner.nextInt();
      }
    }
    int unevenchecker = (n% 2);
    if (unevenchecker != 0) {
      for (int k = 0; k < number.length - 1; k++) {

        for (int l = 0; l < number.length - 1; l++) {
          if (number[k][l] == number[l][k]) {
            ismatch = true;
          }
        }
      }
      if (ismatch) {
        System.out.print("YES");
      }
    } else {
      System.out.print("NO");
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
public class Main {

    static boolean isSymmetric(int mat[][], int size) { 
        for (int i = 0; i < size; i++) 
            for (int j = i + 1; j < size - i; j++) 
                if (mat[i][j] != mat[j][i]) 
                    return false;
        return true; 
    } 

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n= scanner.nextInt();
        int[][] number = new int[n][n];
        boolean ismatch = false;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
              number[i][j] = scanner.nextInt();
            }
        }

        if (isSymmetric(number, n)) {
            System.out.print("YES");
        } else {
            System.out.print("NO");
        }
    }
}

Обратите внимание, что вложенный цикл в isSymmetric начинается с j = i + 1, чтобы не проверять дважды одно и то же условие.

0 голосов
/ 09 ноября 2018

Матрица не симметрична, если вы найдете хотя бы 1 симметричную пару, где 2 части не равны, поэтому вместо проверки на равенство внутри цикла проверьте неравенство :

  ismatch = true;
  for (int k = 0; k < number.length - 1; k++) {
    for (int l = 0; l < number.length - 1; l++) {
      if (number[k][l] != number[l][k]) {
        ismatch = false;
        break;
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...