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