c语言--矩阵转换(附解析)

题目:

输入一个数字构成的矩形, 将矩形的值进行 90 度旋转后打印。

先展示效果:

代码如下:
#include <stdio.h>
int main(void) {
    int k = 0, m = 0, n = 0, f = 1, d = 0;
    int i[9][9] = { 0 };
    int p[9][9] = { 0 };
    printf("请输入整数");
    scanf("%d", &k);
    for (int h = 0; h < k; h++) {
        for (int g = 0; g < k; g++) {
            i[h][g] = f;
            ++f;
        }
    }
    for (m = 0; m < k; m++) {
        for (n = 0; n < k; n++) {
            printf("%-2d ", i[m][n]);
        }
        printf("\n");
    }
    printf("\n");

第一部分,我们先打印出初始的矩阵,因为我们用的是二维数组,所以我们使用了两次循环。
    d = k - 1;
    for (m = 0; m < k; m++, d--) {
        for (n = 0; n < k; n++) {
            p[n][d] = i[m][n];
        }
    }
    for (m = 0; m < k; m++) {
        for (n = 0; n < k; n++) {
            printf("%-2d ", p[m][n]);
        }
        printf("\n");
    }
    return 0;
}

第二部分,我们打印转换后的矩阵,用 k-1 是因为我们的数组第一位元素的下标是 0 。

根据题目分析, [0][0] , [0][1] , [0][2] , [0][3] 被转换为 [0][3] , [1][3] , [2][3] , [3][3] ,

                          [1][0] , [1][1] , [1][2] , [1][3] 被转换为 [0][2] , [1][2] , [2][2] , [3][2] ,

                          [2][0] , [2][1] , [2][2] , [2][3] 被转换为 [0][1] , [1][1] , [2][1] , [3][1] ,

                          [3][0] , [3][1] , [3][2] , [3][3] 被转换为 [0][0] , [1][0] , [2][0] , [3][0] ,

所以未转换前的矩阵 [x][y] x不变,转换后 [x][y] y不变,所以我们就可以进行算法的设计。

 转换前x是0 1 2 3递增,转化后的y是3 2 1 0递减,所以在这里我们使用d--。

最后我们再把转换后的矩阵打印出来就可以了。

(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值