幻方是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。n阶幻方是由1~n2之间的自然数组成的一个n阶方阵,其各行、各列及对角线所含的数字之和均相等。例如3阶幻方(如图1),幻和为15。
奇数阶幻方的构造是所有幻方中最简单的,可以按照如下规则来实现: ⑴将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)
(1)
用下图的程序生成5阶幻方后,List1中的第一行显示的是。
(2)
30阶以内的幻方程序如下图,代码如下,请完成代码填空
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
① ② ③ ④
答案: 【1】17 24 1 8 15
【1】(n+1)/2或n\2+1【2】i=i-1【3】a((i-2)*n+j+1)=0【4】3-n