c - 如何从二维数组中删除位于 C 主对角线上的负元素

标签 c algorithm

我有一个数组:

int a[3][3] = {  
    {-1, 2, 3} ,
    {4, -5, 6} ,
    {7, 8, -9}
};

我希望最终结果是相同的数组,但没有负数元素。

int a[3][2] = {  
    {2, 3} ,
    {4, 6} ,
    {7, 8}
 };

我不知道如何正确执行我的算法,所以请帮助我!

最佳答案

就像@machine_1在评论中所说,有两种解决方案。

首先,将负数替换为零

    n, m = 3;
    int a[n][m] = ...
    for (i = 0; i < n; i++){
        for (j = 0; j < m; j++){
            if (i == j && a[i][j] < 0)
                a[i][j] = 0;
        }
    }

或简化

    n, m = 3;
    int a[n][m] = ...
    for (i = 0, j = 0; i < n && j < n; j++, i++){    
        a[i][j] = 0;
    }

第二个解决方案是删除该元素。但!您不能像这样从数组中删除它。解决方案是建立新的两个矩阵。这里你需要小心设置“newMatrix”矩阵的正确大小。

    n, m = 3;
    int a[n][m] = ...
    for (i = 0; i < n; i++){
        for (j = 0; j < m; j++){
            if (i == j && a[i][j] > 0) {
                newMatrix[k][l] = a[i][j];
                //increment k and l
                continue;
            }
            if (i != j)
                newMatrix[k][l] = [i][j];
                //increment k and l
        }
    }

关于c - 如何从二维数组中删除位于 C 主对角线上的负元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50290194/

相关文章:

algorithm - 通过最大流约束找到未加权图中的最短路径

c - 通过重复存储单词的最佳树型

c - 如何用 C 字符串中的单个空格替换空格?

c - if-else 语句处理

c - 如何在 C 的套接字上发送/接收字符串数组

Ruby 运行长度编码失败

arrays - 不确定为什么 toupper() 会切断 C 中的最后一个字母

找到最有值(value)组合的算法?

algorithm - 最大流量和一些条件

python - 在 O(n) 的排序矩阵中查找小于目标的 # 元素的算法?