1 居上行正中央,依次斜填切莫忘,上出框界往下写,右出框时左边放,重复便在下格填,出角重复一个样。
(1)1 居上行正中央——数字 1 放在首行最中间的格子中;
(2)依次斜填切莫忘——向右上角斜行,依次填入数字;
(3)上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中;
(4)右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中;
(5)重复便在下格填——如果数字{N}右上的格子已被其它数字占领,就将{N+1}填写在{N}下面的格子中;
(6)出角重复一个样——如果朝右上角出界,和“重复”的情况做同样处理

Dim a(1 To 1000) As Integer
Dim k As Integer, i As Integer, s As String
Dim n As Integer, j As Integer
Function geshi(s1 As String, x As Integer) As String
'此函数用于输出时补足空格对齐
Do While Len(s1) < x
s1 = " " + s1
Loop
geshi = s1
End Function
Private Sub Command1_Click() '生成幻方
List1.Clear: Text1.Enabled = False: Command1.Enabled = False
Command2.Enabled = True: Command4.Enabled = True
n = Val(Text1.Text)
k =①_________________
a(k) = 1
num = 2
Do While num <= n * n
If k < n Then '当前位置是第1行,但不是最右边列
k = k + (n - 1) * n + 1
ElseIf k = n Then '当前位置是第1行最右边列
k = k + n
ElseIf ②_________________ Then '非第1行的最右边列时
k = k - 2 * n + 1
Else '一般情况
k = k - n + 1
End If
If a(k) <> 0 Then k = k + 2 * n - 1 '新位置处已有数字时
a(k) = ③____________________
num = num + 1
Loop
s = ""
For i = 1 To n * n
s = s + geshi(Str(a(i)), 5) '每项输出宽度为5个字符的位置
If i Mod n = 0 Then
List1.AddItem s
s = ""
End If
Next i
List1.AddItem "--------------------------------"
End Sub

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

