Не могу понять почему слово симметрична выводится 16 раз, n и m равны 4, и такое ощущение что код как то эти значения умножает. В чем ошибка ? вот код:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, const char * argv[])
{
setlocale(LC_CTYPE, "rus");
const unsigned int n = 4;
const unsigned int m = 4;
int arr[n][m] = {
{ 1, 2, 3, 4 },
{ 2, 1, 7, 6 },
{ 3, 7, 1, 0 },
{ 4, 6, 0, 1 }
};
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << setw(2) << arr[i][j];
}
cout << endl;
}
bool flag = true;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
if (arr[i][j] != arr[j][i])
{
flag = false;
cout << "Не симметрична" << endl;
break;
}
else if
(flag == true)
cout << "Симметрична" << endl;
system("pause");
return 0;
}
Вы 16 раз сравниваете два числа, и для каждого сравнения (а они все у вас успешно равны) просите вывести "Симметрична". Все, как попросили...
bool flag = true;
for (int i = 0; i < n; ++i)
for (int j = i+1; j < n; ++j)
if (arr[i][j] != arr[j][i])
{
flag = false;
break;
}
cout << (flag ? "Симметрична" : "Несимметрична") << endl;
Вот так несколько получше... Кстати, обратите внимание на
for( int j = i+1;
Там проверка с 0 не нужна.
for (int i = 0; i < n && flag; ++i)
for (int j = 0; j < n && flag; ++j)
if (arr[i][j] != arr[j][i])
flag = false;
if (flag)
cout << "Симметрична" << endl;
else
cout << "Не симметрична" << endl;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости