3第三题_Dole Rob 算法生成魔方阵
3阶魔方还原步骤
3阶魔方还原步骤
还原3阶魔方是一项相对较难的挑战,需要一定的耐心和技巧。下面是一个详细的还原步骤,共分为七个阶段。每个阶段都包含一系列的步骤和算法。
第一阶段:十字形在顶面
1.找到白色中心块,并将顶面旋转,使之成为魔方的顶部。
2.找到四个白色边块,并将它们调整到顶面与侧面相遇的位置。
3.使用算法DRU'R'D',将边块从侧面移动到顶面,使之与白色中心块相对。
第二阶段:白色角块在顶层
1.找到魔方中的白色角块,将它们调整到顶层,使之与顶面和侧面配对。
2.使用算法R'D'RD,将角块从侧面移动到顶面,使之与白色中心块相对。
第三阶段:中层还原
1.将顶面旋转到底部,找到当前层顶面与底面的同色边块。
2.利用算法FRUR'U'F',将同色边块调整到底面与侧面相遇的位置。
3.使用算法RUR'U'RU'R',将边块从底层转移到中层。
第四阶段:底层棱块位置还原
1.找到与底面同色的棱块,并将它们调整到侧面与底面相遇的位置。
2.使用算法RUR'U'RUR'U'F'U'F,将棱块从底层移动到中层。第五阶段:底层棱块颜色还原
1.找到底层不正确的棱块,并将其移动到顶层。
2.根据棱块的颜色和位置,使用以下算法进行调整:
a.蓝-橙棱块:RU'L'UR'U'LU
b.蓝-红棱块:FL'BLF'L'B'L
c.绿-橙棱块:R'ULU'RUL'U'
d.绿-红棱块:F'L'BLFL'B'L
第六阶段:底层角块位置还原
1.找到与底面同色的角块,并将它们调整到底层角块位置。
2.使用算法RUR'U'RU'R',将角块从顶层移动到底层。
第七阶段:底层角块颜色还原
Dürer魔方(或幻方)问题
---------------------------------------------------------------最新资料推荐------------------------------------------------------
1 / 8
Dürer 魔方(或幻方)问题
Drer 魔方(或幻方)问题 有些较为复杂的问题,开始时常常
给人以一种变幻莫测的感觉。
但经过细微的分析研究,可以发现其中存在着某些内在的关系。
在使用适当的数学工具后,这些内在关系就被一一揭露出来了。
德国著名的艺术家 Albrecht Drer(1471-1521)于 1514 年曾铸
造了一枚名为Melencotia I 的铜币。
令人奇怪的是在这枚铜币的画面上充满了数学符号、数字及几何
图形。
这里,我们仅研究铜币右上角的数字问题。
1 、Drer 魔方 这是一个由自然数组成的方块,称之为 Drer 魔
方,其数字排列如下:
什么是魔方?我们来下一个定义。
我们所谓的魔方是指由 1~n 2 这 n 2 个正整数按一定规则排列
成的一个 n 行 n 列的正方形。
按不同的要求,它可以具有某些特定的性质,n 称为此魔方的阶。
例如,上面给出的 Drer 魔方是 4 阶的,它的每一行数字之和
为 34,每一列数字之和为 34,把对角线(或反对角线)上的数字加
起来是 34,每个小方块中的数字之和也是 34,若把四个角上的数字
加起来还是 34,多么奇妙!最后一行中间两个数字恰好是铜币的铸
造时间1514 年。
构造魔方是一个古老的数学游戏,起初它还和神灵联系在一起,带有深厚的迷信色彩。
魔方阵算法的设计与实现
1 2 2 2 1
1 1 1 1 1
Think4:杨辉三角
1 1 1 1 1 1 1
1 2 1 3 3 1 4 6 4 1 5 10 10 5 1 6 15 20 15 6
1
Summary
存储
初始化 算法设计 冲突处理 输出
二维数组 所有元素为0
魔方阵
依次填充 下方存放 双重循环
Hope
读书破万卷,下笔如有神。编程也 如此!
教育科学与技术学院二维数组的应用魔方阵算法的设计与实现2014年5月24日outline魔方阵的提出分析问题确定算法算法的程序化调试并整理文reviewinduce魔方阵古代又称纵横图是指nn方阵的组成元素为自然数12?n的平方其中每个元素值都不相等要求满足以下条件
二维数组的应用
魔方阵算法的设计与实现
a[i][j]=1;
Think
Think2:螺旋方阵
1
2
3
4
5
6 7 8 9
18 19 20 21 22 17 28 29 30 23 16 27 26 25 24
百度文库
15 14 13 12 11 10
Think3:塔型方阵
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
教育科学与技术学院
计算机水平考试-程序员分类模拟题数据结构与算法(一).doc
程序员分类模拟题数据结构与算法(-)
综合知识试题
K对具有n个元索的顺序表(采用顺序存储的线性表)进行_________ 操作,其耗时与n的大小无关。
A.在第i(lWiWn)个元素Z后插入一个新元素
B.删除第i(lWiWn)个元素
C.对顺序表中的元素进行排序
D.访问第i(lWiWn)个元素的前驱和后继
2、若字符串s的长度为n(n>l)且其中的字符互不相同,贝Us的长度为2的子串右 ________ 个。
A・ n B・ n-l C・ n-2 D. 2
3、栈的运算特点是后进先出。元索a、b、c、d依次入栈,则不能得到的出栈序列是__________ 。
A- a b c d B. c a b d C. d c b a D. b c d a
4、某循环队列的容量为M,队头指针指向队头元素,队尾指针指向队尾元素Z后,如图8-18所示(M=8),则队列屮的元索数目为 _______________ (MOD表示整除取余运算)。
5、设初始栈为空,s表示入栈操作,x表示岀栈操作,则_________ 是合法的操作序列。
A・ sxxsssxxx B・ xxssxxss C- sxsxssxx D・ xssssxxx
6、n个元索依次全部进入栈后,再陆续出栈并经过一个队列输出。那么,_________ 。
A.元素的出队次序与进栈次序相同
I伽I
队崔
re剖储环队列指针示童图
A. rear-front
B. front-rear
B.元素的出队次序与进栈次序相反
C.元素的进栈次序与进队次序相同
D.元素的出栈次序与出队次序相反
罗伯法
罗伯法5阶幻方
用罗伯法构造幻方:
幻方是一种广为流传的数学游戏,据说早在大禹治水时就发现过。幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。下图就是一个用罗伯法排好的5阶幻方。
罗伯法的助记口诀:
(初学者可先画出一个N×N的方格阵)
1 居上行正中央——数字 1 放在首行最中间的格子中
依次斜填切莫忘——向右上角斜行,依次填入数字
上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中
右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中
重复便在下格填——如果数字{N} 右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中
右上重复一个样——如果朝右上角出界,和“重复”的情况做同样处理
罗伯法的具体方法如下:
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的n2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数(例如5)的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。
罗伯法三阶幻方的解法
罗伯法三阶幻方的解法
罗伯法三阶幻方又被称为古希腊三阶幻方、魔方三阶、6面魔方,是一种具有迷宫结构的拼图游戏,也是一种数学游戏。2014年,在上海的世界罗伯法幻方大赛上,由李志杰率领的中国队获得第一名,中国队在罗伯法三阶幻方的解法上做出了重大贡献。经过几十年的发展,罗伯法三阶幻方的解法已经被大量研究,学者们建立了多种不同的解法。
罗伯法三阶幻方的解法基本上分为两种:一种是机械解法,它是基于特定的机械设计,需要利用某种机械原理来实现;另一种则是数学解法,它是基于罗伯法数学原理的,可以通过归纳推理的方法来解决罗伯法三阶幻方的拼图问题。
机械解法是通过特定的机械设计来解决罗伯法三阶幻方的拼图
问题。机械解法是通过分析幻方的拼图结构,利用特定的机械设计,将其有序地拼在一起。最常见的机械解法是“魔方法”,它是由美国的发明家佩德罗卡洛斯罗伯提出的。这种解法的优点在于对各个拼图部分的步骤有严格的规律性,可以加快解法的步骤,减少记忆量,从而使用户能够更快地完成拼图任务。
另一种是数学解法,它是基于罗伯法数学原理的,可以解决罗伯法三阶幻方的拼图问题。数学解法可以通过推断,归纳,抽象,求解等数学概念来对幻方进行解题。我们可以列出幻方的每一步,依次推导,将拼图的步骤一一归纳,然后抽象出其中的规律,最终达到目的。
无论是机械解法还是数学解法,都是解决罗伯法三阶幻方拼图问
题的有效方法。虽然机械解法比数学解法更快捷,但是多数情况下,由于拼图的复杂性,很难找出机械解法的结论。而数学解法更加准确,具有普遍性,可以应用于任何复杂的拼图。
三阶魔方还原教程
三阶魔方还原教程
三阶魔方是一项非常经典和有趣的益智游戏,许多人可能会感觉还原
魔方非常困难,但实际上只要掌握一些简单的方法和技巧,你也能轻松完
成还原。本文将向你介绍一种基于弗里德里希(Fridrich)方法的三阶魔方
还原教程。
首先,我们需要了解一些基本概念和符号。魔方有6个中心块,代表
6种不同的颜色。分别为白色、黄色、红色、橙色、蓝色和绿色。每个面
有9个小方块,我们将每个小方块称为一个“小块”。使用标准符号表示
每个面的移动,例如U(上面顺时针旋转90度)、D(下面顺时针旋转90度)、F(前面顺时针旋转90度)等等。
1.底层角块还原:首先,我们需要将底层四个角块还原到正确位置。
寻找第一个不在底层的白色角块。如果这个角块在底层,那么可以直接跳
过这个步骤。如果它位于顶层,就需要选择一个位于底层的白色角块并将
其移到顶层。找到已经在顶层的角块,使其与目标角块的颜色相同,然后
执行R’D’RD,将目标角块移到底层。重复上述步骤直到还原完所有角块。
2.中层边块还原:接下来,我们需要将中层四个边块还原到正确位置。类似于底层角块还原,我们需要找到所有不在中层的边块,并将其移到中层。首先,找一个已经在中层的边块,使它与目标边块的颜色相同。然后
执行R’2,将目标边块移到顶层。接下来,通过执行U2将上方的边块移
到相应位置。最后,执行R2将目标边块移到中层。重复上述步骤直到还
原完所有边块。
3.顶层十字还原:现在,我们需要将顶层的白色小块排列成一个十字形状。首先,找到一个白色小块,使其位于顶层。然后,找到与其相邻的已经在顶层的白色小块,并旋转魔方使它们对齐。接下来,按照以下公式依次还原十字:F’D’R’D,FDRD。最后,根据十字的形状调整小块的位置。
应用-Durel魔方问题
问题2:魔方空间的一组基,基中的每个向量 (也称基本魔方)也必须是一个Dürer魔方。 如何构造和选取基?
3.构造基本魔方
如同在n维线性空间中选取自然基一样, 我们先设置一些4阶魔方,其元素由0和1构成。
第1行的1,可放在任1列处。即有四种可能。
若固定了第1行的1的位置,则第二行只有2中可能。 其构造步骤如下所示:
1 00 0
1 00 0
0 0 1 0 或者: 0 0 0 1
0 00 1
010 0
0 10 0
0 01 0
3.构造基本魔方
通过以上分析,总共有4*2=8个不同的基本魔方,我们记为
Q1,…,Q8 ,如下面8个矩阵所示。
1
Q1
0 0
魔方:是指由1~n2个正整数按一定 规则排列成的一个n行n列的正方形。 按不同的要求,它可以具有某些特 定的性质,n称为此魔方的阶。
1. Dürer魔方介绍
例如,右边给出的Dürer魔方是4阶 的,它的每一行数字之和为34,每 一列数字之和为34,把对角线(或 反对角线)上的数字加起来是34, 每个小方块中的数字之和也是34, 若把四个角上的数字加起来还是34
问题:
(1)Dürer魔方有多少个? (2)如何构造所有的Dürer魔方?
2. Dürer魔方的理论分析
魔方三阶教程
魔方三阶教程
魔方三阶教程
魔方,也被称为鲁比克方块,是一种有趣且受欢迎的解谜玩具。它由26个小立方体组成,每个小立方体都有六个不同的颜色。通过旋转这些小立方体,你的目标是使每个面上都只有一种颜色。以下是一步步教你如何解决魔方的三阶教程。
第一步:完成白色底面
首先,我们需要将魔方上的所有白色小块都放在底面。寻找一块具有白色的边块,并将其旋转到底面上的正确位置。然后,找到与这块边块相匹配的白色角块,并将其旋转到正确的位置。一旦完成,你将会看到一个完整的白色底面。
第二步:完成第二层
现在,我们要完成魔方的第二层。将第二层颜色块放在魔方中间。首先,找到一块具有所需色块的边块。将其旋转到第二层相应位置。然后,找到相匹配的角块并将其放在第二层正确位置。通过反复进行这些步骤,直到完成第二层。
第三步:完成顶面十字
接下来,我们要完成魔方的顶面十字。找到一个具有顶面色块的边块,并将其旋转到相应的位置。然后,通过旋转底面和顶面,将其他三块边块放置在正确的位置,以形成一个十字形。
然后,找到与所需色块相匹配的角块,并将其旋转到正确的位置。完成这一步后,你将会得到一个具有十字形和符合你所需色块的顶面。
第四步:完成顶面的角块
现在,我们要将顶面的角块放置到正确的位置。找到一个位于顶面的角块,将其旋转两次将其移至底面。然后,将底面旋转成适当的位置,以使我们可以用两个旋转将该角块放回顶面。反复执行此步骤,直到完成顶面的所有角块。
第五步:完成顶面色块
最后一步是将顶面的色块放置到正确的位置。找到一个位于顶面的边块,并将其旋转两次将其移到底面。然后,将底面旋转到适当的位置,以使我们可以用两个旋转将该边块放回顶面。重复进行此步骤,直到完成顶面的所有色块。
3.2.2矩阵的doolittle分解
k 1
r 1, 2,..., n 1
r 1
air lik ukr lirurr k 1
u1 j a1 j
li 1
ai 1 u11
j 1, 2,..., n
i 2,3,..., n
U的第一行 ------(1) L的第一列 ------(2)
r1
urj arj lrkukj k 1
r 1
air lik ukr
lir
k 1
urr
0 0 1 l43 T 0 0 1 9T 0 0 0 u44 0 0 0 4
y1 b1
r 1
yr br lrj y j j 1
解 12413y01L11y224040y29031b21y,73得/11134331y 4xxxxT12431 6 T
10 5 2 7
2 10 0 3
1.5
11
12
8.5
0.5 3/11 3/11 2/11
2
6 /11
9
4
解Ux y,得
x1 x2 x3 x4 T 1 2 3 4T
xn
yn unn
n
yr urj x j
xr
jr1
urr
Doolittle分解在计算机上实现是比较容易的
3 2 1
4 2
12 3
13 4
魔方阵实现方法(全)
具体实现时:
用i<0,j<0表明格子不存在。找到的格子都已经填过了数的这类数有个特点,那就是可以整除n,即k%n=0。
(2)当n为双偶数时,即n=2*2*m时,算法为:
将所要求的魔方阵分为上下左右4个n/2*n/2的小方阵。
}
else /*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面*/
{
i=i+2;
j=j-1;
}
}
for(i=0;i<N;i++) /*输出数组*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}
方法三:
/*此程序是在网上找到的c程序设计习题7.7的答案,只能算奇数阵,可以算到15阶*/
{
if(i<n/2)
{
if(i%2==1&&Array[i][j]%2==0) /*偶行换偶*/
{
swap(&Array[i][j],&Array[n-1-i][n-1-j]);
}
else if(i%2==0&&Array[i][j]%2==0)/*奇行换奇*/
从Durer魔方跨入线性代数思维之门
0 0 0 1 0 1 Q3 = 0 0 0 1 0 0
0 0 1 0 0 0 0 0 Q4 = 1 0 1 0 1 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0
0 0 0 1 0 Q = 0 0 0 7 0 0 1 1
0 0 1 0 0 1 0 0 Q8 = 0 0 0 1 0 0 0 1
显然, Dürer空间中任何一个魔方 显然, 空间中任何一个魔方 都可以用Q 来线性表示, 都可以用 1,Q2,…,Q8来线性表示,但 它们能否构成D空间的一组基呢 空间的一组基呢? 它们能否构成 空间的一组基呢?
9
求Dürer魔方空间的基 魔方空间的基
1 0 Q1 = 0 0
0 1 Q5 = 0 0
Dürer
主讲: 主讲: 关秀翠
东南大学数学系
Dürer魔方 魔方
什么是Dürer魔方 魔方 什么是 Dürer魔方:4阶,每一行之 魔方: 阶 魔方 和为34,每一列之和为34, 和为 ,每一列之和为 , 对角线(或次对角线) 对角线(或次对角线)之和 是34,每个小方块中的数字 , 之和是34, 之和是 ,四个角上的数字 加起来也是34. 加起来也是
0 0 0 1 0 0 0 0 1 0 Q2 = 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 Q = 6 1 0 1 0 0 0 0 0 0 1
C语言指针编程题
第三题: 第三题: 自Βιβλιοθήκη Baidu实现一个比较字符串大小的函数,也即实现strcmp函数。
第四题: 第四题: 对奇阶魔方阵,可用Dole Rob算法生成,其过程为: 从1开始,以此插入各自然数,直到N2为止。 选择插入位置原则为: a. 第一个位置在第一行的正中; b. 向已填充的前一个数字位置(p,q)的左上角(p-1, q-1)填入下一个数字,如 果出现以下情况,则修改填充位置: 1)若填充位置超出上边界,则修改为下边界的相应位置,即把p-1修改为 n-1; 2)若填充位置超出左边界,则修改为最右边的相应位置,即把q-1改为n-1; 3)若填充位置已有数字,则改为该数字(当前数字)的下一行同一位置。 1 1 1 3 2 6 1 5 2 3 4 6 7 2 1 5 3 4 2 6 7 2 1 5 8 3 4 2 6 7 2 1 5 9 1 3 4 8 3 4 2 1 5 3 4
c语言指针练习题c语言指针面试题c语言编程题c语言编程实例100题c语言编程题库c语言编程练习题c语言基础编程题c语言函数编程题c语言指针c语言函数指针
C语言指针编程题
第一题: 第一题: 有一个数组int A[nSize],要求写一个函数: int * myfunc (int *p, int nSize); 将A中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。 例如: A原来是:1, 0, 3, 4, 0, -3, 5 经过myfunc处理后为:1, 3, 4, -3, 5, 0, 0
求魔方阵的十种算法
求魔方阵的十种算法
魔方阵,古代又称“纵横图”,是指组成元素为自然数一、2…n的平方的n×n的方阵,其中每一个元素值都不相等,且每行、每列和主、副对角线上各n个元素之和都相等。
如3×3的魔方阵:
8 1 6
3 5 7
4 9 2
魔方阵的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
1居上行正中央
依次右上切莫忘
上出框时往下写
右出框时左边放
右上有数下边写
右上出框也一样
一、魔方阵的简介
二、
三、1.何谓矩阵?矩阵就是由方程组的系数及常数所构成的方阵。把用在解线性方程组上既方便,又直观。
四、
五、2.何谓n阶方阵?若一个矩阵是由n个横列与n个纵行所构成,共有个小方格,则称这个方阵是一个n阶方阵。
六、
七、3.何谓魔方阵?4 9 2 3 5 7 8 1 6概念:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵。而那个相等的和称为魔术数字。若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵。
制作一个你要的魔方数据集生成
制作一个你要的魔方数据集生成
魔方(Rubik's Cube)是一种立方体拼图玩具,由于其复杂的结构和多样的移动方式,一直以来都备受欢迎。现在我将介绍如何生成一个适合你要求的魔方的数据集。
步骤一:确定数据集的大小和目标
首先,你需要决定你需要多大的数据集以及你希望数据集包含哪些信息。数据集的大小取决于你要使用的机器学习算法和需要拟合的模型的复杂度。目标有很多种可能,例如生成一个魔方的图像,预测魔方的解法,或者评估魔方的复杂度等等。
步骤二:定义数据的结构
在生成数据集之前,你需要确定每个样本的数据结构。对于魔方,可以考虑以下几个方面的信息:
-魔方的初始状态:定义魔方每个小块的颜色或者编号。
-移动方式:定义魔方的移动方式,例如旋转的方向和层级。
-解法:魔方的解法可以通过一系列的移动步骤来表示。
步骤三:生成数据集
生成数据集的方法有很多种,这里介绍两种常见的方法:
1.随机生成:可以使用随机算法来生成魔方的初始状态和解法。通过定义随机的旋转方式和步数来生成一串解法,然后将这个解法应用到初始状态上即可得到目标状态。这种方法能够生成大量的不同的魔方数据,但是可能不具有实际的意义。
2.手动标注:另一种方法是通过实际操作魔方来生成数据。你可以通
过自己手动操作魔方并记录每个步骤,从而生成数据集。这种方法可以确
保数据的真实性,并且可以根据你的需求生成特定类型的数据。
步骤四:数据预处理
生成的原始数据集可能需要进行预处理以适应你的模型。预处理的方
法可以包括数据清洗、数据归一化、特征工程等等。对于魔方的数据集,
可以考虑将颜色信息编码成数字,对解法进行序列化等操作。
偶数阶魔方阵构造方法(DOC)
偶数阶魔方阵构造方法(DOC)
方为双偶幻方;当n不可被4整除时,我们称该偶阶幻方为单偶幻方。可用了Hire法、Strachey以及YinMagic将其实现,Strachey为单偶模型,我对双偶(4m 偶数阶魔方阵构造方法阶)进行了重新修改,制作了另一个可行的数学模型,称之为Spring。YinMagic是我于2002年设计的模型,他可以生成任意的偶阶幻方。2009-11-03 10:23:40| 分类: 其他 |字号大中小订阅在填幻方前我们做如下约定:如填定数字超出幻方格范围,则把幻方看成是可以无限伸展的图形,如下图: (1)n = 4k(4的整数倍时)
Merzirac法生成奇阶幻方 (1) 先将整个方阵划分成k*k个4阶方阵,然后在每个4阶方阵的对角线上做记在第一行居中的方格内放1,依次向左上方填入2、3、4…,如果左上方已有数号字,则向下移一格继续填写。如下图用Merziral法生成的5阶幻方: (2) 由左而右、由上而下,遇到没有记号的位置才填数字,但不管是否填入数17 24 1 8 15 字,每移动一格数字都要加1 23 5 7 14 16 (3) 自右下角开始,由右而左、由下而上,遇到没有数字的位置就填入数字,
4 6 13 20 22 但每移动一格数字都要加1 10 12 19 21 3 例:k=1时构造完如下 11 18 2
5 2 9 1
6 2 3 13 loubere法生成奇阶幻方 5 11 10 8 在居中的方格向上一格内放1,依次向右上方填入2、3、4…,如果右上方已有9
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*
[说明]
下面的程序用Dole Rob 算法生成N 阶(N 为奇数)魔方阵(各行、列、对角线数字
之和相等)。该算法的过程为:从1 开始,按如下方法依次插入各自然数,直到N2 为止:
a. 在第一行的正中插入1;
b. 新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新
位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个
位置;
c. 若最近插入的元素是N 的整数倍,则选同列的下一行位置为新位置。
例如,3 阶魔方阵如下所示:
*/
#include
#define MAXSIZE 50
void main()
{
int row,column,number,value;
int n;
int a[MAXSIZE][MAXSIZE];
while( n<2 || n>MAXSIZE || n%2==0)
{
printf("输入魔方阶数(0~%d奇数):",MAXSIZE);
scanf("%d",&n);
}
value=1;
number=n*n;
row=1,column=n/2+1;
while( value<=number )
{
a[row][column]=value;
if( value%n==0 )
{
row++;
}
else
{
--row,++column;
if( row<1 )
{
row=n;
}
if( column>n )
{
column=1;
}
}
value++;
}
for( row=1; row<=n; row++ )
{
for( column=1; column<=n; column++ )
printf(" %5d",a[row][column]);
printf("\n");
}
}