【发布时间】:2021-04-16 19:24:13
【问题描述】:
我想从矩阵中的主对角线和辅助对角线中删除元素以获得一个新矩阵,但是我的代码不能正常工作。似乎第二个 for 循环有问题。我试图改变它,但它没有再次工作。我希望你能帮助我。 此代码应仅适用于偶数尺寸
#include <stdio.h>
int main() {
int m[50][50], i, j, k, n;
printf("Dimensions: \n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &m[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
for(k=j+1;k<n;k++){
if(i==j)
m[i][k-1]=m[i][k];
if(i+j+1==n)
m[i][k]=m[i][k-1];
}
}
}
printf("The new matrix: \n");
for (i = 0; i < n; i++) {
for (j = 0; j < n - 2; j++) {
printf("%d ", m[i][j]);
}
printf("\n");
}
}
// Input:
-69 -85 1 0
1 -8 2 -44
-2 5 8 -11
1 -11 0 5
Expected output:
-85 1
1 -44
-2 -11
-11 0
Output of my code:
-85 1
-44 2
-11 5
1 -11
【问题讨论】:
-
这段代码对于这个简单的任务来说太大了。主对角线就是
m[i][i]元素。可以通过简单的修改类似地访问辅助节点。 -
在第三组循环中,当
j == 0时k - 2可以是-1,这会破坏索引。 -
@EugeneSh。很抱歉把所有的东西都写得很详细,但如果我不写,人们会抱怨它不可读
-
这个就不详细了。您正在用 O(n^2) 编写一个简单的 O(n) 算法。
-
@WeatherVane 我尝试将其更改为k-1,但代码仍然不起作用