Лучшие помощники
- Megamozg 2190 б
- Matalya1 1800 б
- DevAdmin 1690 б
- arkasha_bortnikov 860 б
- Dwayne_Johnson 845 б
14 декабря 2022 18:59
779
Задача С «Симметричная матрица»Дана квадратная матрица. Проверить, является ли она симметричной относительно главной диагонали.
Входные данные.
Записано число 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 }
Исправленный код
- #include <iostream>
- using namespace std;
- int main()
- {
- int n = 0;
- int a[100][100];
- bool isSymmetrically = true;
- cin >> n;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- cin >> a[i][j];
- }
- cout << endl;
- }
- for(int i = 0; i < n - 1; i++)
- {
- for(int j = i + 1; j < n; j++)
- {
- if(a[i][j] != a[j][i])
- {
- isSymmetrically = false;
- break;
- }
- else
- {
- isSymmetrically = true;
- }
- }
- if (isSymmetrically == false)
- {
- break;
- }
- }
- if (isSymmetrically == true)
- {
- cout << "YES" << endl;
- }
- else
- {
- cout << "NO" << endl;
- }
- return 0;
- }
0
·
Хороший ответ
16 декабря 2022 18:59
Остались вопросы?
Еще вопросы по категории Информатика
Что такое трассировка? Как она производится?...
Переведите пожалуйста: 24 576 битов в Байты и Килобайты; 2048 Байтов в биты и Килобайты; 1,5 Кб в Байты и биты; 2 в степени 13 битов в Байты и Килобай...
В какой науке информация — это содержание, заложенное в знаковые (сигнальные) последовательности?...
Устройство хранения программ и данных.(6 букв, начинается на "п"...
Как построить граф, описывающий состав программного обеспечения компьютера?...
Все предметы