VBA实现任意n阶幻方的一种填法(n≥3)

原创 2007年09月23日 21:56:00

参考http://blog.csdn.net/northwolves/archive/2007/09/23/1796696.aspx的思路,拟代码如下:

Sub magicsquare(ByVal n As Long, ByRef matrix())
Dim i As Long, j As Long, k As Long, p As Long, a(), b()
ReDim matrix(1 To 256, 1 To 256)
If n < 3 Then MsgBox "n must be larger than 2! ": Exit Sub 'n不得小于3
If n Mod 4 = 0 Then '双偶阶幻方(n为偶数,且能被4整除)
ReDim a(1 To n, 1 To n)
ReDim b(1 To n, 1 To n)
For i = 1 To n
For j = 1 To n
matrix(i, j) = IIf((i Mod 4) / 2 = (j Mod 4) / 2, n * n + 1 - (i - 1) * n - j, (i - 1) * n + j)
Next
Next

Else
If n Mod 4 = 2 Then '单偶阶幻方(n为偶数,且不能被4整除)
p = n / 2
ReDim a(1 To p, 1 To p)
magicsquare p, a

For i = 1 To p
For j = 1 To p
matrix(i, j) = a(i, j)
matrix(i + p, j) = a(i, j) + 3 * p * p
matrix(i, j + p) = a(i, j) + 2 * p * p
matrix(i + p, j + p) = a(i, j) + p * p
Next
Next

For j = 1 To p
If j = p / 2 + 1 Then
For i = 1 To (n - 2) / 4
k = matrix(j, p / 2 + i)
matrix(j, p / 2 + i) = matrix(j + p, p / 2 + i)
matrix(j + p, p / 2 + i) = k
Next
Else
For i = 1 To (n - 2) / 4
k = matrix(j, i)
matrix(j, i) = matrix(j + p, i)
matrix(j + p, i) = k
Next
End If

If n > 6 Then
For i = 1 To (n - 6) / 4
k = matrix(j, p + p / 2 + i)
matrix(j, p + p / 2 + i) = matrix(j + p, p + p / 2 + i)
matrix(j + p, p + p / 2 + i) = k
Next
End If
Next

Else '奇数阶幻方

For j = 0 To n - 1
For i = 0 To n - 1
If j = 0 Then matrix(j + 1, i + 1) = IIf(i >= (n - 1) / 2, 0, n * (n + 1)) + (i - (n - 1) / 2) * (n + 2) + 1
If j > 0 Then matrix(j + 1, i + 1) = 1 + (n * n + matrix(j, i + 1) + IIf(matrix(j, i + 1) Mod n = 0, 0, n)) Mod n ^ 2
Next
Next
End If
End If
End Sub
 
Sub makemagicsquare()
Dim arr(), n As Long
Randomize
n = CLng(InputBox("please enter an integer", "infomation", 3 + Int(Rnd * 254)))
magicsquare n, arr
[a1].Resize(256, 256) = arr
[a1].Resize(256, 256).Columns.AutoFit
End Sub 

N(奇数)阶幻方-java实现代码

N(奇数)阶幻方-java实现代码
  • GISShiXiSheng
  • GISShiXiSheng
  • 2015年01月30日 09:51
  • 1889

打印奇数阶魔方阵(幻方阵)

所谓魔方阵是指这样的的方阵: 它的每一行、每一列和对角线之和均相等。 输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。 例如,当n=3时,魔方阵为: 8  1   6 3  5   ...
  • a411612512
  • a411612512
  • 2013年11月10日 17:47
  • 1559

魔方阵原理及十种解法(C语言)

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。 如3×3的魔方阵:      8 ...
  • MacanS
  • MacanS
  • 2016年04月21日 15:35
  • 7602

n阶幻方的C#实现

  • 2011年09月14日 15:24
  • 10KB
  • 下载

java实现—n阶奇数幻方

奇数阶幻方:      奇数阶幻方指的是有一个行数和列数都相等的数据组成一个方阵,即由1~n*n个数据组成,由于是奇数阶幻方,所以阶数n必须是奇数。其要求为:每行、每列和对角线上的数据之和相等。法国人...
  • wilson_m
  • wilson_m
  • 2017年11月27日 11:25
  • 72

编程实现N阶奇数幻方游戏

奇幻七绝   先填上行正中央,   依次斜填切莫忘。   上格没有顶格填,   顶格没有底格放。 转载于:http://blog.csdn.net/fengchaokobe/article/...
  • chence19871
  • chence19871
  • 2012年08月15日 15:23
  • 2837

java实现 n阶幻方(奇偶通用)

/*******测试代码*************/public class MagicTest { public static void main(String[] args) ...
  • u013499771
  • u013499771
  • 2014年03月09日 17:54
  • 699

经典证明:任意三角形都能被分成n≥4个等腰三角形

证明:对于任意一个三角形和任意一个大于等于 4 的正整数 n ,都存在一种把这个三角形分割成 n 个等腰三角形的方案。这个问题曾经出现在 1976 年的 Crux Mathematicorum 上。 ...
  • ruancheng3
  • ruancheng3
  • 2014年11月25日 19:56
  • 212

java算法代码(n阶幻方)

  • 2011年06月24日 12:40
  • 293KB
  • 下载

c语言的n阶全对称幻方

  • 2011年06月30日 20:03
  • 942B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VBA实现任意n阶幻方的一种填法(n≥3)
举报原因:
原因补充:

(最多只允许输入30个字)