2

所以我们有一个 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,这将指示矩阵是否为三角形。某处有泄漏,我似乎无法找到它。如果事实证明一切都错了,我

4

0 回答 0