如下图所示:对于任意给定的n,顺时针打印如下数据:
3
1 2 3
6 4
5
----------------------------------
4
1 2 3 4
9 10 5
8 6
7
----------------------------------
5
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
...
...
...
对于这种填充数据来说,其填充原理类似于一个满的二维数组的顺时针填充问题。下面我们来分析一下对于这样的数组的数据填充问题。
根据题目的顺时针填充来说,我们可以把这个问题根据顺时针求解分为:
<1>将这个数组看作一些等边三角形,从外自内的进行分解,例如:n=5时,
1 2 3 4 5 和
12 6 13 14
11 7 15
10 8
9
这两个等边三角形来分析。
<2>然后分别对于每个等边三角形,按顺时针方向来填充。
1,第一行的元素依次为 A[k][j]=A[k][j-1]+1;
2,副对角线上的元素依次为 A[i][s+2-k-i]=A[i-1][s+3-k-i]+1;
3,对于第一列的元素从最后一行依次向上填充A[i-1][k]=A[i][k]+1;
其中最为复杂的地方就在关于副对角线元素的填充问题了。其实大家不难发现,副对角线上元素的下标之和为s+2-k;
(s为数组A[][]的元素个数,n为第k个等边三角形的首行元素个数,k是指当前正在填充第K个等边三角形)
下面将我将自己写的个程序贴出来供大家分享下,如有不妥之处,欢迎大家批评指教。