奇数阶魔方阵算法分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
奇数阶魔方阵
一、提出问题
所谓“奇数阶魔方阵”是指n 为不小于3的奇数的魔方阵。这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵。例如:3阶、5阶和7阶的魔方阵如图3 – 4 所示。
294753618 ,922518113
211912102220136416
14752315812417 ,
20
1124940312212
343413223214444233241513453634251614537352617864629271897
47382819101183930 图3 – 4 3阶5阶和7阶魔方阵
容易知道,这三个魔方阵的魔方常数分别是15、65和175。
现在要求给出:能让计算机自动输出类似图3 – 4 所示的n 阶奇数魔方阵的算法,其中n 为任意给定的一个不小于3的奇数。
二、简单分析
决定“奇数阶魔方阵”的关键是要按要求决定其方阵中的各个数字。观察图3 – 4中的三个奇数阶魔方阵,不难发现:
1.由于是正规魔方,故所填入的n 2个不同整数依次为1、2、3、…、n 2 ;
2.各行、列和对角线上的数字虽各不相同,但其和却是相同的。这表明,其魔方常数可由公式n ( n 2 + 1 ) / 2得到。
3.数字在阵列中的次序,并没有遵从阵列单元的行、列下标的顺序,但数字“1”却始终出现在阵列第一行的正中间位置,而数字“n 2”也始终出现在阵列第n 行的正中间位置,这说明阵列中的数字排列应该是有一定规律的。
通过对两个奇数阶魔方阵的简单分析,下面几个基本问题必须得到解决:
◆ 奇数阶魔方阵中的数字有些什么规律?
◆ 数字“1”的位置应如何确定?
三、设计准备
1.奇数阶魔方阵中的数字规律
通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律:
(1)自然数1出现在第一行的正中间;
(2)若填入的数字在第一行(不在第n 列),则下一个数字在第n 行(最后一行)且列数加1(列数右移一列);
(3)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧;
(4)一般地,下一个数字在前一个数字的右上方(行数少1,列数加1);
(5)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字的下方。(一般地,n 的倍数的下一个数字是在该数的下方。)
按照上述的规律,我们来完成3阶的魔方阵:2
947536
18
第一步:将“1”填入1行2列的位置,即1
(按规律(1));
第二步:将“2”填入3 (最后) 行3 ( = 2 + 1 )列的位置,即2
1
(按规律
(2));
第三步:将“3”填入2行1列的位置,即2
1
3(按规律(3));
第四步:将“4”填入3行1列的位置(“3”的下面);即2
31
4(按规律(5))
第五步:将“5”填入2行2列的位置;即2
431
5(按规律(4));
第六步:将“6”填入1行3列的位置,即2
45316
(按规律(4));
第七步:将“7”填入2行3列的位置(“6”的下面),即2
4536
17(按规律(5));
第八步:将“8”填入1行1列的位置,即2
47536
18(按规律(3));
第九步:将“9”填入3行2列的位置,即2
47536
189(按规律(2))。
至此,一个3阶魔方阵构造完成了。
2.数字“1”的位置确定方法
由于数字“1”要填写在魔方阵第一行的正中间,因此我们只需要确定第一行的正中间单元的列下标即可。
考虑到对于一个奇数阶魔方阵来说,它的每一行都有奇数个位置,所以“正中间的位置”就必然存在。容易知道,一个n (为奇数)阶魔方阵第一行的正中间单元的列下标为整数 ( n + 1 ) / 2。于是数字“1”应填写在魔方阵列的第1行第 ( n + 1 ) / 2列处。
四、实施步骤
1.算法编制的工作顺序:
有了上述的设计准备,我们所要的算法可按如下的工作顺序编制:
第一步:输入魔方阵的阶数n(为奇数),并以此定义一个二维数组;
第二步:确定所谓“正中间位置”的列下标值,以及应填入的最大数字;
第三步:进行完成魔方阵的填写工作;
第四步:输出已完成的奇数阶魔方阵。
2.变量设置:
N:表示魔方阵的阶数(为奇数);
A:表示魔方阵的二维数组;
I:数组A的行序号;
J:数组A的列序号;
R:填入的数字;
S:对角线上各数字之和。
3.参考框图:如图3 – 5 所示。
4.框图说明:整个框图应分为三个功能部分:
第一个部分的功能是完成奇数N的输入,并定义二维数组,完成有关元素的数值计算,同时能实现当N不是奇数时自动结束。图3 – 5 处理“奇数阶魔方阵”问题的框图
第二个部分的功能是完成魔方阵的填写工作。
填写并不是按数组A的下标顺序进行,而是通过对有关规律的判断确定下标I和J的不同值来进行。其中涉及到了判断“R是N的整数倍?”,这可以通过判断是否有等式R–INT ( R / N ) N = 0 成立来实现。
第三个部分的功能是完成输出魔方阵和计算相应魔方常数的工作。
计算相应魔方常数的工作是通过对魔方阵的对角线中各元素数值来实现,即在准备输出打印元素A ( I , I )时,通过累加方式S = S + A ( I , I )来实现。