只换正时皮带可以吗:VB 程序 解释下

来源:百度文库 编辑:神马品牌网 时间:2024/05/04 12:34:00
奇数阶幻阵解法之一:
Option Base 1
Private Sub Form_Load()
Dim a()
Me.AutoRedraw = True
n = Val(InputBox(""))
i = (n + 1) / 2
j = n
ReDim a(n, n)
For k = 1 To n * n
a(i, j) = k
If i = n And j = n Then
j = j - 1
Else
i = i + 1
j = j + 1
If i = n + 1 Then i = 1
If j = n + 1 Then j = 1
End If
If a(i, j) <> 0 Then i = i - 1: j = j - 2
Next k
For i = 1 To n
For j = 1 To n
Print Tab(j * 5 - 4); a(i, j);
Next j
Print
Next i
End Sub
我要详细的解释,每一句话 另外程序没错

呵呵,这个是我写的代码额。
先解释原理:
将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Aij的下一个是Ai+1,j+1)。但若遇以下四种情形,则应修正排数法。
(1) 列排完(即j=n+1时),则转排第一列;
(2) 行排完(即i=n+1时),则转排第一行;
(3) 对An,n的下一个总是An,n-1;
(4) 若Aij已排进一个自然数,则排Ai-1,j-2。
以下解释代码:
Option Base 1 '将数组下界的缺省值设置为1
Private Sub Form_Load()
Dim a() '定义数组
Me.AutoRedraw = True '将窗体的AutoRedraw属性设置为True,你也可以直接修改
n = Val(InputBox("")) '输入数值
i = (n + 1) / 2 '找到中间一行
j = n '找到最后一列
ReDim a(n, n) '重定义数组
For k = 1 To n * n 'k为填入数组的数字
a(i, j) = k '填入数值
If i = n And j = n Then
j = j - 1 '第三个条件
Else
'每次总是向右下角排(即Aij的下一个是Ai+1,j+1)
i = i + 1
j = j + 1
'第一二两个条件
If i = n + 1 Then i = 1
If j = n + 1 Then j = 1
End If
If a(i, j) <> 0 Then i = i - 1: j = j - 2 '第四个条件
Next k
'以下代码输出
For i = 1 To n
For j = 1 To n
Print Tab(j * 5 - 4); a(i, j);
Next j
Print
Next i
End Sub

一维数组和二维数组的应用!

还可以,就是有个缺陷,循环不对!