如何反转C中的对角矩阵?
how to revers a diagonal matrix in C?
如果我们想要反转对角矩阵,例如:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
如果我们反转对角线,它会像这样:
5 2 3 4 1
6 9 8 7 10
11 12 13 14 15
16 19 18 17 20
25 22 23 24 21
或者像这个例子:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
它会是这样的:
4 2 3 1
5 7 6 8
9 11 10 12
16 14 15 13
但不允许使用函数,矩阵始终是 a[N][N] 类型..
这似乎很管用 - 虽然它并不漂亮。您可以使它对不同大小的数组更通用。
#include <stdio.h>
const int N = 5;
void print (int arr[][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
}
printf ("\n");
}
printf ("\n");
}
void flip (int arr[][N]) {
int a[5][5] = {0};
int x, y;
for (y = 0; y < N; y++) {
for (x = 0; x < N; x++) {
if (x == y){
a[y][x] = arr[y][N-y-1];
} else if (x == N-(y+1)) {
a[y][x] = arr[y][y];
} else {
a[y][x] = arr[y][x];
}
}
}
print(a);
}
int main() {
int a[5][5] = {
{1, 2, 3, 4, 5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
};
flip(a);
return 0;
}
输出:
5 2 3 4 1
6 9 8 7 10
11 12 13 14 15
16 19 18 17 20
25 22 23 24 21
如果我们想要反转对角矩阵,例如:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
如果我们反转对角线,它会像这样:
5 2 3 4 1
6 9 8 7 10
11 12 13 14 15
16 19 18 17 20
25 22 23 24 21
或者像这个例子:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
它会是这样的:
4 2 3 1
5 7 6 8
9 11 10 12
16 14 15 13
但不允许使用函数,矩阵始终是 a[N][N] 类型..
这似乎很管用 - 虽然它并不漂亮。您可以使它对不同大小的数组更通用。
#include <stdio.h>
const int N = 5;
void print (int arr[][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
}
printf ("\n");
}
printf ("\n");
}
void flip (int arr[][N]) {
int a[5][5] = {0};
int x, y;
for (y = 0; y < N; y++) {
for (x = 0; x < N; x++) {
if (x == y){
a[y][x] = arr[y][N-y-1];
} else if (x == N-(y+1)) {
a[y][x] = arr[y][y];
} else {
a[y][x] = arr[y][x];
}
}
}
print(a);
}
int main() {
int a[5][5] = {
{1, 2, 3, 4, 5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
};
flip(a);
return 0;
}
输出:
5 2 3 4 1
6 9 8 7 10
11 12 13 14 15
16 19 18 17 20
25 22 23 24 21