Лучшие помощники
- Megamozg 2180 б
- Matalya1 1800 б
- DevAdmin 1690 б
- arkasha_bortnikov 840 б
- Dwayne_Johnson 840 б
15 декабря 2022 22:13
658
Задача С «Симметричная матрица»Дана квадратная матрица. Проверить, является ли она симметричной относительно главной диагонали.
Входные данные.
Записано число 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
·
Хороший ответ
17 декабря 2022 22:13
Остались вопросы?
Еще вопросы по категории Информатика
Помогите пожалуйста найти небольшой доклад на тему"информатика это наука"!!!...
1) Чему будут равны значения в ячейках А6 и В6 после выполнения команды КОПИРОВАТЬ А2:В2 в А3:В6? 2) В ячейке A1 находится формула. Формулу из ячейки...
какие из приведенных ниже величин целесообразно представлять с помошью таблиц? величины: список учеников класса, рост учеников класса, средний рост уч...
Скорость передачи данных через ADSL - соединение равна 512000бит/с. Передача файла через это соединение заняла 16 секунд. Определите размер файла в Кб...
Что больше? 100 кбайт * 0,1 мбайт...
Все предметы