如何从二维数组中去掉负元素,这些元素位于主对角线上,用C表示

如何从二维数组中去掉负元素,这些元素位于主对角线上,用C表示,c,algorithm,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]

我有一个数组:

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]=。。。
对于(i=0;i
还是简化

    n, m = 3;
    int a[n][m] = ...
    for (i = 0, j = 0; i < n && j < n; j++, i++){    
        a[i][j] = 0;
    }
n,m=3;
int a[n][m]=。。。
对于(i=0,j=0;i
第二个解决方案是删除该元素。但是您不能像这样从数组中删除它。解决方案是建立新的两个矩阵。在这里,您需要小心设置“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
        }
    }
n,m=3;
int a[n][m]=。。。
对于(i=0;i0){
新矩阵[k][l]=a[i][j];
//增量k和l
持续
}
如果(i!=j)
新矩阵[k][l]=[i][j];
//增量k和l
}
}

你说的“没有”是什么意思?您的意思是要将它们替换为
0
?因为,这样的数组无法调整大小。如果某些元素是正的,结果会是什么?可以理解,主对角线中的所有元素都是负的。我想我得到了正确的答案。谢谢大家!!非常感谢你的帮助!