Таким образом, у нас есть матрица nxn (п <= 20) Если a [i] [j] == 0 при i> j и a [i] [j]! = 0 при i <= j … или … a [i] [j] == 0 когда я < j и a [i] [j]! = 0, когда i> = j … матрица называется треугольной. Я полагаю, в 3×3 треугольные матрицы выглядят так
1 1 1 1 0 0
0 1 1 1 1 0
0 0 1 1 1 1
Вот мой код:
bool flag;
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
if ((i > j && a[i][j] != 0) || (i <= j && a[i][j] == 0))
{
count++;
break;
}
}
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
if ((i < j && a[i][j] != 0) || (i >= j && a[i][j] == 0))
{
count++;
break;
}
}
if (count == 2) flag = false;
else flag = true;
cout << flag;
Теперь о проблеме — два примера матриц, которые я дал перед кодом, должны всегда возвращать 1 (true), поскольку они по определению треугольные, а, скажем, это:
0 1 0
0 0 5
1 3 4
должен всегда возвращать 0 (ложь), поскольку он ни в коем случае не является треугольным. Моя проблема в том, что независимо от того, что я ввожу, по какой-то причине он всегда возвращает 1 (true), сообщая мне, что матрица является треугольной, а она явно нет. Мой вопрос, как я могу это исправить? Я абсолютно не знаю, в чем заключается моя ошибка, хотя я подозреваю, что это как-то связано с моим подходом подсчета, который в основном — если не выполнены некоторые условия для треугольной матрицы — прерывает цикл и добавляет +1 к счетчику, затем проверьте, является ли это перевернутая треугольная матрица, и если она все еще не добавлена еще одна к счетчику. В конце счетчик будет 1 или 2, что будет указывать, является ли матрица треугольной или нет. Где-то есть утечка, и я не могу ее найти. Если окажется, что все не так, я открыт для предложений, чтобы сделать это другим способом.
Задача ещё не решена.
Других решений пока нет …