`
cjc
  • 浏览: 680344 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EXCEL VBA]EXCEL中用递归实现任意n(3≤n≤256)阶幻方

阅读更多

下面代码将实现任意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

 
分享到:
评论

相关推荐

    所有BOM列表_VBA连接BOM表的递归展开至最后一阶_

    标题“所有BOM列表_VBA连接BOM表的递归展开至最后一阶”表明这是一个使用VBA脚本创建的Excel工作簿,其功能是通过连接到Oracle数据库来获取BOM数据,并递归地展开所有层级,直到达到最底层的组件。 这个过程涉及到...

    c++递归c++递归c++递归

    c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘...

    递归实现 N阶行列式求值 java版

    使用java语言,递归实现的N阶行列式求值

    ExcelVBA.rar_ ExcelVBA_VB excel_excel tutorial_excelvba_excelvb教

    3. **对象模型**:Excel VBA的对象模型包括Workbook、Worksheet、Range、Cell等对象,每个对象都有其属性和方法。比如,可以使用Range对象的Value属性获取或设置单元格的值,使用Worksheet对象的Activate方法激活...

    MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    "MyBatis之自查询使用递归实现 N级联动效果" MyBatis是一个功能强大且灵活的持久层框架,它支持自查询和递归查询,下面我们将探讨如何使用MyBatis实现 N级联动效果。 递归查询 递归查询是指在一个查询中调用自身...

    ackermann函数的递归实现和非递归实现

    阿克曼函数是一种非常特殊的数学函数,常用于理论计算和计算机科学中,特别是在讨论递归算法和计算复杂性时。这个函数是由荷兰数学家格奥尔格·阿克曼在20世纪早期提出的,它展示了超越函数的概念,即无法用初等函数...

    Excel VBA 学习源代码

    Excel VBA(Visual Basic for Applications)是Microsoft Excel内置的一种编程语言,它允许用户自定义工作表函数、自动化任务、创建宏以及与Excel的其他部分进行交互。通过VBA,你可以大大提高工作效率,实现复杂的...

    C++实现输出任意阶幻方

    实现幻方的核心算法通常有两种经典方法:**拉丁方**和**桑斯通斯方法**(Sloane's method)。拉丁方方法利用了拉丁方的性质,即每个数字在每一行和每一列只能出现一次。而桑斯通斯方法则通过迭代和旋转来构造幻方。 ...

    非递归法实现n皇后问题

    本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正

    VBA生成m选n的全部组合

    VBA(Visual Basic for Applications)是Microsoft Office套件中内置的一种编程语言,它允许用户自定义工作流程,创建宏或扩展Excel等应用的功能。在这个特定的案例中,我们讨论的是如何利用VBA来生成m选n的所有组合...

    任意阶幻方c++程序

    这里,我们重点讨论如何用C++实现任意阶幻方。 首先,理解幻方的基本原理至关重要。幻方的构造通常基于递归或者回溯法,这需要我们设计一个有效的填充策略。对于n阶幻方,其基本思想是从中心位置(n/2,n/2)开始,...

    n阶行列式计算 C语言 实现

    根据给定的信息,本文将详细解释“n阶行列式计算 C语言实现”的核心知识点,包括如何使用C语言来实现n阶行列式的计算方法,并对代码中的关键部分进行深入解析。 ### 一、n阶行列式的定义与计算原理 在数学中,行列...

    Excel VBA 操作 拆分当前Excel表中 / 所选取文件夹所有子文件中 所有sheet保存到对应文件夹路径中拆分表内

    在Excel VBA编程中,有时候我们需要对大型工作簿进行管理和优化,这可能涉及到将一个大文件拆分成多个小文件,每个文件对应原工作簿中的一个单独工作表。这个任务可以通过编写VBA宏来实现,从而自动化整个过程。下面...

    递归实现n重循环

    使用递归实现N重循环,这里的N是不确定的。 此代码实现的功能描述如下: 1. 有一个字符串的矩阵,用vector&lt; vector&lt; CStirng &gt; &gt; 表示 2. 行与行之间进行排列组合 3. 输出所有组合的方式

    N选M的所有组合(递归与非递归实现)

    本主题将详细探讨如何从N个不同的元素中选择M个元素的所有可能组合,同时提供递归和非递归两种实现方式。 首先,我们来理解组合的概念。组合是指在不考虑顺序的情况下,从N个不同元素中选择M个元素的方法数。在数学...

    Excel VBA工具 列出文件夹下所有子文件夹和文件

    Excel VBA工具 可以指定条件, 列出某个文件夹下所有子文件夹和文件

    Excel2010 VBA教程素材

    3. **宏的创建与录制**:对于初学者,宏的录制功能是一个很好的起点,可以快速生成VBA代码,实现对特定操作的自动化。但记录的宏代码可能不是最优的,因此学会手动编写VBA代码是非常重要的。 4. **事件驱动编程**:...

    hannuota.rar_Excel VBA_excel

    3. **VBA模块(VBA Modules)**:包含编写好的VBA代码,实现了汉诺塔的递归算法,控制盘子的移动,并更新界面显示。 4. **宏(Macros)**:可能有一些宏方便用户执行特定操作,如开始新的游戏或查看解法步骤。 5. **...

    ExcelVBA列出指定目录及子目录文件

    在Excel VBA中,我们可以利用文件系统对象(FileSystemObject)来遍历指定的目录及其子目录,并将所有文件的信息列出到工作表中。这是一项非常实用的技能,尤其是在需要批量处理或管理大量文件时。以下将详细介绍...

    用 c++编写递归幻方

    用递归算法编写幻方, 只是奇数不是偶数 啊啊啊啊啊

Global site tag (gtag.js) - Google Analytics