Sprawdzenie czy macierz jest symetryczna w stosunku do głównej przekątnej

0

Robię takie zadanie ze stepik.org
Biorąc pod uwagę liczbę n, nie większą niż 10 i matrycę o wielkości n × n. Sprawdź, czy ta macierz jest symetryczna w stosunku do głównej przekątnej. Wypisz słowo "TAK", jeśli jest symetryczne, a słowo "NIE" w przeciwnym razie. Nie wiem co robię źle nie przechodzi mi pisze że jest-źle czy moglibyście mnie trochę naprowadzić co robię źle oto kod :

import java.util.Scanner;

  public class Main {

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

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

      for (int i = 0; i < dim; i++) {
        for (int j = 0; j < dim; j++) {
          number[i][j] = scanner.nextInt();
        }
      }
      int unevenchecker = (dim % 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");
      }
    }
  }

0

Wypisz słowo "TAK", jeśli jest symetryczne, a słowo "NIE" w przeciwnym razie.

0

Przetłumaczyłem pytanie bo tam było po angielsku:) nie wiem dlaczego to przetłumaczyłem mogłem Od razu dać po angielsku:) tu podaje oryginał:
Given the number n, not exceeding 10, and a matrix of size n × n.
Check whether this matrix is symmetric in relation to the main diagonal. Output the word “YES”, if it is symmetric and the word “NO” otherwise.
Ogólnie że w tym programie namotałem coś z pętlami sprawdzającymi tą przekątną albo nie rozumiem problemu pod względem matematycznym za długo nad tym siedzę:)

0

No to powoli - zacznijmy od porządnego sformatowania Twojego kodu:
https://hastebin.com/riwuhawohu.cs

Powiedz mi teraz co się stanie w momencie, kiedy sterowanie wejdzie do środka tego if (unevenchecker != 0) { i okaże się, że ismatch == false.

0
Patryk27 napisał(a):

No to powoli - zacznijmy od porządnego sformatowania Twojego kodu:
https://hastebin.com/riwuhawohu.cs

Powiedz mi teraz co się stanie w momencie, kiedy sterowanie wejdzie do środka tego if (unevenchecker != 0) { i okaże się, że ismatch == false.

Powinno wyjść z pętli i wyświetlić no ?

0

I wyświetlić co?

0

Dobra przechodzi sprawdza dalej warunek z tego co rozumiem

0
  if (ismatch) {
          System.out.print("YES");
        }
 
      } else {
        System.out.print("NO");
      }

ten else nie jest od tego if'a,

0

Ok zmajstrowałem takie coś wyniki już są dobre(tak mi się wydaje) ale stepik.org mi je nie uznaje

import java.util.Scanner;

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 flag=true;

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

    for (int i = 0; i < n; i++) {
      for (int j = i; j < n - i; j++) {
        if (number[i][j] != number[j][i]) {
          flag = false;
          break;
        }
      }
    }
    System.out.println(flag==true?"YES":"NO");

  }
}

Czy jest sens dodania paru warunków że jak matryca ma wielkość 1 to nie jest symetryczna ? Nie mam pomysłu co dalej. Pisze że przekraczam czas ma być poniżej 5 sekund jest 8 :)

0

Jak spełnia się warunek to wychodzisz break'iem tylko z pierwszego for'a. Wrzuc ten kod do metody i zwróc bool'a z metody, zaraz po spelnieniu warunku w if'ie.

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


    int n = scanner.nextInt();
    if (n > 10 || n <= 0) {
      System.out.println("NO");
    } else {


      int[][] number = new int[n][n];
      //boolean flag=true;


      for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
          number[i][j] = scanner.nextInt();
        }
      }
//    for (int i = 0; i < n; i++) {
//      if(flag==false){
//      for (int j = i; j < n - i; j++) {
//        if (number[i][j] != number[j][i]) {
//          flag = false;
//        }
//      }
//    }
      System.out.println(isSymmetric(number, n) ? "YES" : "NO");

    }
  }

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

  }
}

I ciągle niby przekroczono czas ):

0

Dlaczego po prostu nie zrobisz return false;, tylko się bawisz z tą zmienną? :-P
Ofc. nie wpłynie to na czas wykonywania, ale warto myśleć pisząc kod.

Na marginesie - skoro zadanie mówi, że n należy do konkretnego przedziału, nie musisz tego sprawdzać - dane wejściowe powinny być zawsze zgodne z założeniami (chyba że treść zadania wprost mówi inaczej).

0

To i tak nic nie zmienia stepik nie uznaje tego zadnia daje sobie na razie spokój może kiedyś do tego wrócę niestety nie będę mieć 100% ):

1 użytkowników online, w tym zalogowanych: 0, gości: 1