所以我们有一个 nxn 矩阵(n <= 20)。如果 a[i][j] == 0 当 i > j 和 a[i][j] != 0 当 i <= j ... 或 ... a[i][j] == 0 当 i < j and a[i][j] != 0 when i >= j ...矩阵称为三角形。我想在 3x3 三角矩阵中看起来像这样
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(真),因为它们根据定义是三角形的,而比如说:
0 1 0
0 0 5
1 3 4
应该始终返回 0(假),因为它绝不是三角形的。我的问题是,无论我输入什么,由于某种原因,它总是返回 1(真)告诉我矩阵是三角形的,而它显然不是。我的问题是我怎么可能解决这个问题?我完全不知道我的错误是什么,尽管我怀疑它与我的计数方法有关,这基本上是 - 如果不满足三角矩阵的某些条件 - 打破循环并将 +1 添加到计数器,然后检查它是否是一个反向三角矩阵,如果它仍然没有向计数器添加一个。最后,计数器将是 1 或 2,这将指示矩阵是否为三角形。某处有泄漏,我似乎无法找到它。如果事实证明一切都错了,我