题目:
输入一个数字构成的矩形, 将矩形的值进行 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--。
最后我们再把转换后的矩阵打印出来就可以了。
(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)