profile
Размещено 5 лет назад по предмету Информатика от flpcdsakdkdk

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

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

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

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

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

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

  1. Ответ на вопрос
    Ответ на вопрос дан csharp

    Почему?

    Потому что Вы каждый раз, когда матрица симметрична (но не до конца, а на данной итерации), выводите "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. }
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.