奇数阶幻方的构造是所有幻方中最简单的,可以按照如下规则来实现:
⑴将1放在第一行中间一列;(如图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)
Private Sub Command1_Click()
Dim i As Integer, i 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<> 1Then
② : j=1
a((i-1)*n+j)=k
ElseIf i=1 And j=n Then
i+1 =1
a((i-1)*n+j)=k
ElseIf i <> 1 And j<> n Then
If ③ Then
i=i-1:j=j+1
va((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
List1AddItem s
Next i
End Sub
Function format( x As Integer) As String ‘将数字字符串格式化为3个字符长度
Dim n As integer, i As Integer
format =Str(x)
n=Len(format)
For i=1 To ④
format ="”+ format
Next i
End Function
① ② ③ ④