输入N,输出一圈圈数字递增的正方形,如下
1 2 3
8 9 4
7 6 5
解答的重点就是对问题的分割
1.打印数组
2.初始化数组数据,(关键是找到通用的模式,让后用循环表达出来)
数据可以看成大正方形 套着小正方形,需要的只是初始位置的值,和边长
我用groovy写的,应该还是容易看懂的。
int[][] tArray = new int[2][2];
tArray[1][1] = 10;
println tArray[1][1]
def printSquare = { int[][] data, int power ->
for (int y = 0; y < power; y++) {
for (int x = 0; x < power; x++) {
print data[x][y]
print " "
}
println ""
}
}
def initData = { int power ->
int[][] data = new int[power][power];
int elementValue = 1;
int pointX = 0;
int pointY = 0;
int squareNum = power;
while (squareNum > 1) {
int sideNum = 0;
while (sideNum < 4) {
int sideElement = 0;
while (sideElement < squareNum - 1) {
println "sideEle ${sideElement} square ${squareNum} pointX ${pointX} pointY ${pointY} value ${elementValue}"
data[pointX][pointY] = elementValue
switch (sideNum) {
case 0:
pointX++
break;
case 1:
pointY++
break;
case 2:
pointX--
break;
case 3:
pointY--
break;
}
elementValue++;
sideElement++;
}
sideNum++;
}
squareNum -= 2
pointX++
pointY++
}
if (squareNum == 1) {
data[pointX][pointY] = elementValue;
}
data
}
printSquare(initData(4), 4)
printSquare(initData(5), 5)
printSquare(initData(6), 6)
输出省略debug log是:
sideEle 0 square 4 pointX 0 pointY 0 value 1
sideEle 1 square 4 pointX 1 pointY 0 value 2
sideEle 2 square 4 pointX 2 pointY 0 value 3
sideEle 0 square 4 pointX 3 pointY 0 value 4
sideEle 1 square 4 pointX 3 pointY 1 value 5
sideEle 2 square 4 pointX 3 pointY 2 value 6
sideEle 0 square 4 pointX 3 pointY 3 value 7
sideEle 1 square 4 pointX 2 pointY 3 value 8
sideEle 2 square 4 pointX 1 pointY 3 value 9
sideEle 0 square 4 pointX 0 pointY 3 value 10
sideEle 1 square 4 pointX 0 pointY 2 value 11
sideEle 2 square 4 pointX 0 pointY 1 value 12
sideEle 0 square 2 pointX 1 pointY 1 value 13
sideEle 0 square 2 pointX 2 pointY 1 value 14
sideEle 0 square 2 pointX 2 pointY 2 value 15
sideEle 0 square 2 pointX 1 pointY 2 value 16
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
sideEle 0 square 5 pointX 0 pointY 0 value 1
sideEle 1 square 5 pointX 1 pointY 0 value 2
sideEle 2 square 5 pointX 2 pointY 0 value 3
sideEle 3 square 5 pointX 3 pointY 0 value 4
sideEle 0 square 5 pointX 4 pointY 0 value 5
sideEle 1 square 5 pointX 4 pointY 1 value 6
sideEle 2 square 5 pointX 4 pointY 2 value 7
sideEle 3 square 5 pointX 4 pointY 3 value 8
sideEle 0 square 5 pointX 4 pointY 4 value 9
sideEle 1 square 5 pointX 3 pointY 4 value 10
sideEle 2 square 5 pointX 2 pointY 4 value 11
sideEle 3 square 5 pointX 1 pointY 4 value 12
sideEle 0 square 5 pointX 0 pointY 4 value 13
sideEle 1 square 5 pointX 0 pointY 3 value 14
sideEle 2 square 5 pointX 0 pointY 2 value 15
sideEle 3 square 5 pointX 0 pointY 1 value 16
sideEle 0 square 3 pointX 1 pointY 1 value 17
sideEle 1 square 3 pointX 2 pointY 1 value 18
sideEle 0 square 3 pointX 3 pointY 1 value 19
sideEle 1 square 3 pointX 3 pointY 2 value 20
sideEle 0 square 3 pointX 3 pointY 3 value 21
sideEle 1 square 3 pointX 2 pointY 3 value 22
sideEle 0 square 3 pointX 1 pointY 3 value 23
sideEle 1 square 3 pointX 1 pointY 2 value 24
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
sideEle 0 square 6 pointX 0 pointY 0 value 1
sideEle 1 square 6 pointX 1 pointY 0 value 2
sideEle 2 square 6 pointX 2 pointY 0 value 3
sideEle 3 square 6 pointX 3 pointY 0 value 4
sideEle 4 square 6 pointX 4 pointY 0 value 5
sideEle 0 square 6 pointX 5 pointY 0 value 6
sideEle 1 square 6 pointX 5 pointY 1 value 7
sideEle 2 square 6 pointX 5 pointY 2 value 8
sideEle 3 square 6 pointX 5 pointY 3 value 9
sideEle 4 square 6 pointX 5 pointY 4 value 10
sideEle 0 square 6 pointX 5 pointY 5 value 11
sideEle 1 square 6 pointX 4 pointY 5 value 12
sideEle 2 square 6 pointX 3 pointY 5 value 13
sideEle 3 square 6 pointX 2 pointY 5 value 14
sideEle 4 square 6 pointX 1 pointY 5 value 15
sideEle 0 square 6 pointX 0 pointY 5 value 16
sideEle 1 square 6 pointX 0 pointY 4 value 17
sideEle 2 square 6 pointX 0 pointY 3 value 18
sideEle 3 square 6 pointX 0 pointY 2 value 19
sideEle 4 square 6 pointX 0 pointY 1 value 20
sideEle 0 square 4 pointX 1 pointY 1 value 21
sideEle 1 square 4 pointX 2 pointY 1 value 22
sideEle 2 square 4 pointX 3 pointY 1 value 23
sideEle 0 square 4 pointX 4 pointY 1 value 24
sideEle 1 square 4 pointX 4 pointY 2 value 25
sideEle 2 square 4 pointX 4 pointY 3 value 26
sideEle 0 square 4 pointX 4 pointY 4 value 27
sideEle 1 square 4 pointX 3 pointY 4 value 28
sideEle 2 square 4 pointX 2 pointY 4 value 29
sideEle 0 square 4 pointX 1 pointY 4 value 30
sideEle 1 square 4 pointX 1 pointY 3 value 31
sideEle 2 square 4 pointX 1 pointY 2 value 32
sideEle 0 square 2 pointX 2 pointY 2 value 33
sideEle 0 square 2 pointX 3 pointY 2 value 34
sideEle 0 square 2 pointX 3 pointY 3 value 35
sideEle 0 square 2 pointX 2 pointY 3 value 36
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11