如何在C中反转对角矩阵?

时间:2019-05-31 13:01:55

标签: c89

如果要反转对角矩阵,例如:

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]类型。

1 个答案:

答案 0 :(得分:0)

这似乎是骗人的-虽然不是很漂亮。您可能可以使其对不同大小的数组更通用。

#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