幻方是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。n阶幻方是由 1~n2 之间的自然数组成的一个 n 阶方阵,其各行、各列及对角线所含的数字之和均相等。例如 3 阶幻方(如图 1),幻和为 15。
图 1
奇数阶幻方的构造是所有幻方中最简单的,可以按照如下规则来实现:
(1)将 1 放在第一行中间一列;(如图 2)
(2)从 2 开始直到 n*n 为止,各数按下列规则存放:
假设当前要存放的数为 k,则 k 存放在(k-1)数的右上方并按照规则:
①若(k-1)放在第 1 行且不是最后一列,则将 k 存放在 n 行,(k-1)所在列右侧;(如图 3)
②若(k-1)放在第 n 列且不是第一行,则将 k 存放在第 1 列,(k-1)的上 1 行;(如图 4)
③若(k-1)即不在第 1 行也不在最后 1 列:
若(k-1)右上方有数,则将 k 放在(k-1)的下 1 行的同一列。(如图 5)
若(k-1)右上方没有数,则将 k 放在(k-1)的右上方;(如图 6)
④若(k-1)在第 1 行第 n 列,将 k 填在(k-1)的正下方(如图 7)

图2

图3

图4

图5

图6

图7

图8
1.用图8的程序生成 5 阶幻方后,List1 中的第一行显示的是_____________________。
2.30 阶以内的幻方程序如图8,代码如下,请完成代码填空:
Private Sub Command1_Click()
Dim i As Integer, j As Integer, n As Integer 'i 表示行,j 表示列
Dim a(1 To 1000) As Integer, k As Integer '数组 a 依次保存幻方中的数
Dim s As String
n = Val(Text1.Text)
j = ______________
a(j) = 1
i = 1
For k = 2 To n * n
If i = 1 And j <> n Then
i = n: j = j + 1
a((i - 1) * n + j) = k
ElseIf j = n And i <> 1 Then
_______________: j = 1
a((i - 1) * n + j) = k
ElseIf i = 1 And j = n Then
i = i + 1
a((i - 1) * n + j) = k
ElseIf i <> 1 And j <> n Then
If _______________ Then
i = i - 1: j = j + 1
a((i - 1) * n + j) = k
Else
i = i + 1
a((i - 1) * n + j) = k
End If
End If
Next k
List1.Clear
For i = 1 To n
s = ""
For j = 1 To n
s = s + format(a((i - 1) * n + j))
Next j
List1.AddItem s
Next i
End Sub
Function format(x As Integer) As String '将数字字符串格式化为 4 个字符长度
Dim n As Integer, i As Integer
format = Str(x)
n = Len(format)
For i = 1 To _____________
format = " " + format
Next i
End Function