用二维数组打印螺旋方阵和螺旋矩阵

————————————————————————————————————————————————————————————————

螺旋方阵,形如:

1         2        3        4        5

16      17      18      19       6

15      24      25      20       7

14      23      22      21       8

13      12      11      10       9

它是从阵列的第一行开始,顺时针旋转数列,直到阵列中心,

用二维数组打印螺旋方阵和螺旋矩阵_第1张图片

 

当然,还有并不规则的螺旋矩阵:

 1    2    3    4    5    6    7

20  21  22  23  24  25   8

19  32  33  34  35  26   9

18  31  30  29  28  27  10

17  16  15  14  13  12  11

 

对于这样的阵列,我们从不规则的矩阵入手,把方阵看作是特殊的矩阵。

-------我们可以看到,矩阵中的数字是按照 ”线“ 的方向排列的。“线”在拐弯,数字跟着拐弯。所以,我们从这条会拐弯的“线”入手。

怎样去找其中的规律呢?

每一行,每一列,貌似都只有一部分有规律。但是如果把有规律的部分划出来,我们会发现点什么。

用二维数组打印螺旋方阵和螺旋矩阵_第2张图片

仔细看看,,是不是图形中的每一块都有规律了。

当然,如果是不规则矩阵,我们也可以找其中的规律:

用二维数组打印螺旋方阵和螺旋矩阵_第3张图片

规则的螺旋方阵也可以找到这种方法,如图:

用二维数组打印螺旋方阵和螺旋矩阵_第4张图片

 

因此,我们就用上图7*7的矩阵所示的分割方法,把每个要打印的矩阵分成5部分。
 

第一部分是上边的三角区域;

第二部分是右边的三角区域;

第三部分是下边的三角区域;

第四部分是左边的三角区域;

第五部分是中间的小区域,当然,如果是偶数行的矩阵,中间的区域就不存在了。

 

我们发现,数字的“线”就是按照我们所分的区域走的。第一部分、第二部分、第三部分、第四部分、然后循环,一、二、三、四,最后可能走到第五部分结束。

而且,第五部分只能从左往右走。

 

下面分析一下,这个二维数组代码的写法。

设定每一行为一个length为n的一维数组,m个一维数组组成了二维数组;这样就形成了 矩阵。

第一部分的二维数组规则:array[x][y]  x不变,y改变。

第二部分的二维数组规则:array[x][y]  y不变,x改变。

第三部分的二维数组规则:array[x][y]  x不变,y倒序改变。

第四部分的二维数组规则:array[x][y]  y不变,x倒序改变。

 

这条数字“线”,我们定义一个变量key,每一次往数组里赋值,就让key自增一次。

 

 

OK ! 附上代码:

此处应该有代码,但年限久远,CSDN把代码搞错乱了,所以去掉了。

大家根据分析,找规则,每个方位都有规律,按方位操作一个二维数组,最后便利打印就OK了。

如有问题欢迎大家讨论。

 

 

你可能感兴趣的:(JAVA应用)