下面代码将实现任意n(3≤n≤256)阶幻方,显示在EXCEL的 A1:IV256中
Sub magicsquare(ByVal n As Long, ByRef matrix())
Dim i As Long, j As Long, k As Long, p As Long, a(), temp As New Collection
ReDim matrix(1 To 256, 1 To 256)
If n < 3 Then MsgBox "n must be larger than 2! ": Exit Sub
If n Mod 4 = 0 Then
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
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 i = 1 To (n - 2) / 4
temp.Add i
Next
For i = 3 * (n - 2) / 4 + 1 To n
temp.Add i
Next
For i = 1 To p
For j = 1 To temp.Count
k = matrix(i, temp(j))
matrix(i, temp(j)) = matrix(i + p, temp(j))
matrix(i + p, temp(j)) = k
Next
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
Range("a1").Resize(256, 256) = arr
Range("a1").Resize(256, 256).Columns.AutoFit
End Sub
分享到:
相关推荐
使用java语言,递归实现的N阶行列式求值
n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...
使用VBA 连接ORACEL数据独立式的BOM ,展开至最后一阶
本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正
主要介绍了MyBatis之自查询使用递归实现 N级联动效果,本文给大家分享两种实现方式,需要的的朋友参考下吧
使用递归实现N重循环,这里的N是不确定的。 此代码实现的功能描述如下: 1. 有一个字符串的矩阵,用vector< vector< CStirng > > 表示 2. 行与行之间进行排列组合 3. 输出所有组合的方式
Excel VBA工具 可以指定条件, 列出某个文件夹下所有子文件夹和文件
用递归算法编写幻方, 只是奇数不是偶数 啊啊啊啊啊
此代码实现从N个数字中取出M个数字的所有组合,有两种实现方法,递归方法和非递归方法。
我用二维数组代表棋盘,用户输入棋盘的维度N,程序输出所有合法布局以及布局的个数。也就是说,几皇后,程序都可以输出合法布局以及个数。输入0,结束程序。 代码非常简单易懂,注释很全,与网上的不同,没有用指针...
c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘...
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
n皇后非递归实现,n皇后非递归实现,n皇后非递归实现,n皇后非递归实现,n皇后非递归实现
n皇后非递归 c++源码实现 n皇后非递归 c++源码实现 n皇后非递归 c++源码实现
递归 阶乘 求和 用两个递归实现1!+2!+3!+。。。+n! 对新手有帮助!
读写word和excel的方法,并实现递归算法将管点连接生成管段。
java 用递归实现字符串反转 java 用递归实现字符串反转
本文实例讲述了python递归计算N!的方法。分享给大家供大家参考。具体实现方法如下: def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) 希望本文所述对大家的Python程序设计有所帮助...
使用递归的方式来替代for来实现不同行与行之间进行组合。 输入(1,2,3)(4,5,6) 得到 (1 4)(1 5)(1 6)(2 4)(2 5)(2 6)(3 4)(3 5)(3 6)
【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,...