我有一个数组:
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
}
}