Предмет: Информатика, автор: flpcdsakdkdk

Задача С «Симметричная матрица»

Дана квадратная матрица. Проверить, является ли она симметричной относительно главной диагонали.
Входные данные.

Записано число n (0 < n ≤ 100).
В следующих n строках записано по n целых чисел от -32768 до 32767.
Выходные данные.

Вывести YES, если матрица симметрична относительно главной диагонали, иначе вывести NO.

Пример входных данных
3
1 2 3
2 4 5
3 5 6

Пример выходных данных
YES
почему у меня выводит "да" 3 раза??

Приложения:

Ответы

Автор ответа: csharp
1

Почему?

Потому что Вы каждый раз, когда матрица симметрична (но не до конца, а на данной итерации), выводите "YES", хотя не знаете, будет ли она симметрична далее.

Как решить?

1. Заведите переменную типа bool:

bool isSymmetrically = true;

2. В теле условия if (a[i][j] != a[j][i]) замените вывод на следующее:

isSymmetrically = false; // матрица не симметрична, можно заканчивать цикл (с помощью break)

В блоке else:

isSymmetrically = true; // на данном этапе симметрия присутствует

2.1. После вложенного цикла произведите проверку на то, симметрична ли матрица, чтобы в случае несимметричности не продолжать проверку, а сразу сделать вывод:

if (isSymmetrically == false)

{  break;  }

3. После всех циклов вы произвдите следующую проверку:

if (isSymmetrically = true) // если матрица симметрична

{ // вывод YES }

else

{ // вывод NO }

Исправленный код

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.    int n = 0;
  6.    int a[100][100];
  7.    bool isSymmetrically = true;
  8.    cin >> n;
  9.    for (int i = 0; i < n; i++)
  10.    {
  11.        for (int j = 0; j < n; j++)
  12.        {
  13.            cin >> a[i][j];
  14.        }
  15.        cout << endl;
  16.    }
  17.    for(int i = 0; i < n - 1; i++)
  18.    {
  19.        for(int j = i + 1; j < n; j++)
  20.        {
  21.            if(a[i][j] != a[j][i])
  22.            {
  23.                isSymmetrically = false;
  24.                break;
  25.            }
  26.            else
  27.            {
  28.                isSymmetrically = true;
  29.            }
  30.        }
  31.        if (isSymmetrically == false)
  32.        {
  33.          break;
  34.        }
  35.    }
  36.    if (isSymmetrically == true)
  37.    {
  38.        cout << "YES" << endl;
  39.    }
  40.    else
  41.    {
  42.        cout << "NO" << endl;
  43.    }
  44.    return 0;
  45. }
Похожие вопросы
Предмет: Литература, автор: 202157