как обратить диагональную матрицу в C? - PullRequest
0 голосов
/ 31 мая 2019

и если мы хотим перевернуть диагональную матрицу, например:

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 голосов
/ 31 мая 2019

Похоже, что уловка - это не красиво, хотя.Возможно, вы можете сделать его более универсальным для массивов разных размеров.

#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 
...