-4

我有一个数组:

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

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

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

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

4

1 回答 1

1

就像@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
        }
    }
于 2018-05-11T11:27:56.337 回答