如何从二维数组中去掉负元素,这些元素位于主对角线上,用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
?因为,这样的数组无法调整大小。如果某些元素是正的,结果会是什么?可以理解,主对角线中的所有元素都是负的。我想我得到了正确的答案。谢谢大家!!非常感谢你的帮助!