Лучшие помощники
15 декабря 2022 22:13
666

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

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

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

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

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

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. }
0
·
Хороший ответ
17 декабря 2022 22:13
Остались вопросы?
Найти нужный