本文主要是介绍逆时针填充矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
逆时针将矩阵填充
问题描述
编程实现自动填充nxn矩阵阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1, 2,…,nXn,其中:n从键盘输入且3≤n≤20.最后向显示器输出该矩阵所有元素。
输入形式
输入一个正整数,为矩阵的行数和列数
输出形式
按行列顺序输出nXn矩阵的所有元素。
(1)每行n列矩阵元素均需在一行内输出显示
(2)输出每行矩阵元素后均需换行输出下一行,共输出n行
(3)每个矩阵元素数值的域宽均为4位且右对齐
样例输入
11
样例输出
11 10 9 8 7 6 5 4 3 2 1
12 49 48 47 46 45 44 43 42 41 40
13 50 79 78 77 76 75 74 73 72 39
14 51 80 101 100 99 98 97 96 71 38
15 52 81 102 115 114 113 112 95 70 37
16 53 82 103 116 121 120 111 9469 36
17 54 83 104 117 118 119 110 93 68 35
18 55 84 105 106 107 108 109 92 67 34
19 56 85 86 87 88 89 90 91 66 33
20 57 58 59 60 61 62 63 64 65 32
21 22 23 24 25 26 27 28 29 30 31
算法逻辑实现
通过对题目的分析,我们可以知道,当给一个n时,其顺序将是个逆时针顺序
n...................................1
...................................n+n-1+n-1+n-2
...................................
....................................
.......................................
........................................
..........................................
.......................................
.......................................
........................................
n+n-1................................n+n-1+n-1
由此我们可以看到,矩阵中转弯的数据具有一定的规律性,可以将其放入数组中即
[n,n-1,n-1,n-2,n-2,…,1,1]
同时二维数组的坐标可以看成下x,y坐标,对于下标的操作可以总结成为四种行为,向上,向下,向左,向右,其代表不同的坐标操作。
代码实现过程
#include <stdio.h>int main() {int num, i;int k = 0, j = 0;int arr[20][20];scanf("%d", &num);int tempnum = num - 1;int numarr[2 * num];numarr[1] = num;//定义需要翻转的数目for (i = 2; i < 2 * num - 1; i = i + 2) {numarr[i] = tempnum;numarr[i + 1] = tempnum;tempnum--;}//定义坐标数组,向左,向左,向右,向上int direction[4][2] = { {0, -1}, {1, 0}, {0, 1}, {-1, 0} };//定义当前位置的坐标int x = 0;int y = num;int numIndex = 1;if (num >= 3 && num <= 20) {for (i = 1; i <= num * num; i++) {//每次更新x和y的坐标x = direction[j % 4][0] + x;y = direction[j % 4][1] + y;arr[x][y] = i;//判断何时进行转向k++;//当k等于需要转向的数据时,更新jif (k == numarr[numIndex]) {numIndex++;k = 0;j++;}}//将数组的值打印出来for (i = 0; i < num; i++) {for (j = 0; j < num; j++) {printf("%4d", arr[i][j]);
// printf(" ");}printf("\n");}} else {printf("Please input number between 3 to 20\n");}
}
效果演示过程
这篇关于逆时针填充矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!