【问题标题】:how to revers a diagonal matrix in C?如何反转C中的对角矩阵?
【发布时间】:2019-05-31 13:01:54
【问题描述】:

如果我们想反转对角矩阵,比如:

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

【问题讨论】:

  • 你能证明任何证据表明你试图自己解决这个问题吗?
  • 到目前为止,您在解决这个家庭作业问题方面做了哪些尝试?我们愿意为您提供提示或帮助解决具体问题,但我们不会为您完成工作。

标签: c89


【解决方案1】:

这似乎是个窍门——虽然它并不漂亮。您可能可以使其对不同大小的数组更通用。

#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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多