魔方阵

合集下载

魔方阵算法及C语言实现

魔方阵算法及C语言实现

魔方阵算法及C语言实现1 魔方阵概念魔方阵是指由1,2,3……n2填充的,每一行、每一列、对角线之和均相等的方阵,阶数n = 3,4,5…。

魔方阵也称为幻方阵。

例如三阶魔方阵为:魔方阵有什么的规律呢?魔方阵分为奇幻方和偶幻方。

而偶幻方又分为是4的倍数(如4,8,12……)和不是4的倍数(如6,10,14……)两种。

下面分别进行介绍。

2 奇魔方的算法2.1 奇魔方的规律与算法奇魔方(阶数n = 2 * m + 1,m =1,2,3……)规律如下:1.数字1位于方阵中的第一行中间一列;2.数字a(1 < a ≤ n2)所在行数比a-1行数少1,若a-1的行数为1,则a的行数为n;3.数字a(1 < a ≤ n2)所在列数比a-1列数大1,若a-1的列数为n,则a的列数为1;4.如果a-1是n的倍数,则a(1 < a ≤ n2)的行数比a-1行数大1,列数与a-1相同。

2.2 奇魔方算法的C语言实现1 #include <stdio.h> 2// Author: / 3// N为魔方阶数 4#define N 115 6int main()7{8int a[N][N]; 9int i;10 int col,row;1112 col = (N-1)/2;13 row = 0;1415a[row][col] = 1;1617for(i = 2; i <= N*N; i++)18 {19if((i-1)%N == 0 )20 {21 row++;22 }23else24 {25// if row = 0, then row = N-1, or row = row - 126 row--;27 row = (row+N)%N;2829// if col = N, then col = 0, or col = col + 130 col ++;31 col %= N;32 }33 a[row][col] = i;34 }35for(row = 0;row<N;row++)36 {37for(col = 0;col < N; col ++)38{39 printf("%6d",a[row][col]);40 }41printf("\n");42 }43return0;44 }3 偶魔方的算法偶魔方的情况比较特殊,分为阶数n = 4 * m(m =1,2,3……)的情况和阶数n = 4 * m + 2(m = 1,2,3……)情况两种。

11阶立方体魔方阵的制作及原理(精)

11阶立方体魔方阵的制作及原理(精)

11 階立方體魔方陣的製作及原理摘要:在這篇報告中,我們將0~1330中每一個正整數,先將每一個數都連續除以11兩次,再把每一個數的餘數以及商,分別取出來,再將每一個數都表示成a×112+b×11+c,其中a、b、c都是0~10的正整數,再將這些數轉化成座標形式(a、b、c),再利用等差數列的觀念,從原點分別向X軸、Y軸、Z軸增加一定的座標量,希望11 階立方體陣中,每一個平面上它們的橫線、直線、對角線,及立方體的四條對角線,他們的x座標、y座標及z座標0~10均只出現一次,如此一來,將這些座標換算回所對的數,會出現每一個面的直線、橫線、對角線及方體中四條對角線上面的數字總和相等的結果。

研究動機:在上學期學習「數量關係」,曾經提到一種以相同大小增加或減少的數列,老師提到可以用這種觀念來解釋平面上的魔方陣.在「有趣的魔方陣」這本書中,我們又看到了有關於魔方的各種製作方法及各式各樣的變形魔方,其中所介紹的立體方陣引起了我們的興趣,但是我們發現書本所記的立體方陣都只提到2階,3階或者12面體的立體方陣(見圖)的製作及結果,但是這本書的介紹僅限於此,並沒有再提到任何立體方陣的敘述,所以我們就想到了一個問題:”能不能用類似的手法創造一個與正方形魔方類似的立體方陣?”,也就是在它的格子中填入一些數字,使它裡面的每一面橫、直、對角線的總和均相等且立方體內的四條對角線總和也與前述相等,基於這項原因經過多次的實驗及推理觀察,我們將對11階的立方體進行觀察研究。

研究目的:發展一個製作11階立方體魔方的方法,使它能滿足研究動機中的結論,並推測是否還有其他立體方陣存在。

研究方法:根據85年度嘉義中小學科展作品「奇數階的製作及原理」我們以11階的平面魔方陣為例,重新觀察它的製作過程,現在我們的問題是:”將0-120的每一個正整數填入(如圖)11×11的正方形空格中,使它的直、橫、及對角線總和均相等”,面對這個問題,我們先將0-120的每個數都除以11,找出商及餘數,並表示成座標得到詳細結果如下:0÷11=0 ……0(0,0)1÷11=0……1(0,1)2÷11=0……2(0,2)3÷11=0 ……3(0,3)4÷11=0……4(0,4)5÷11=0……5(0,5)6÷11=0 ……6(0,6)7÷11=0……7(0,7)8÷11=0……8(0,8)9÷11=0 ……9(0,9)10÷11=0……10(0,10)11÷11=1……0(1,0)12÷11=1 ……1(1,1)13÷11=1……2(1,2)14÷11=1……3(1,3)15÷11=1 ……4(1,4)16÷11=1……5(1,5)17÷11=1……6(1,6)18÷11=1 ……7(1,7)19÷11=1……8(1,8)20÷11=1……9(1,9)21÷11=1 ……10(1,10)22÷11=2……0(2,0)23÷11=2……1(2,1)24÷11=2 ……2(2,2)25÷11=2……3(2,3)26÷11=2……4(2,4)27÷11=2 ……5(2,5)28÷11=2……6(2,6)29÷11=2……7(2,7)30÷11=2 ……8(2,8)31÷11=2……9(2,9)32÷11=2……10(2,10)33÷11=3 ……0(3,0)34÷11=3……1(3,1)35÷11=3……2(3,2)36÷11=3 ……3(3,3)37÷11=3……4(3,4)38÷11=3……5(3,5)39÷11=3 ……6(3,6)40÷11=3……7(3,7)41÷11=3……3(3,8)42÷11=3 ……9(3,9)43÷11=3……10(3,10)44÷11=4……0(4,0)45÷11=4 ……1(4,1)46÷11=4……2(4,2)47÷11=4……3(4,3)48÷11=4 ……4(4,4)49÷11=4……5(4,5)50÷11=4……6(4,6)51÷11=4 ……7(4,7)52÷11=4……8(4,8)53÷11=4……9(4,9)54÷11=4 ……10(4,10)55÷11=5……0(5,0)56÷11=5……1(5,1)57÷11=5 ……2(5,2)58÷11=5……3(5,3)59÷11=5……4(5,4)60÷11=5 ……5(5,5)61÷11=5……6(5,6)62÷11=5……7(5,7)63÷11=5 ……8(5,8)64÷11=5……9(5,9)65÷11=5……10(5,10)66÷11=6 ……0(6,0)67÷11=6……1(6,1)68÷11=6……2(6,2)69÷11=6 ……3(6,3)70÷11=6……4(6,4)71÷11=6……5(6,5)72÷11=6 ……6(6,6)73÷11=6……7(6,7)74÷11=6……8(6,8)75÷11=6 ……9(6,9)76÷11=6……10(6,10)77÷11=7……0(7,0)78÷11=7 ……1(7,1)79÷11=7……2(7,2)80÷11=7……3(7,3)81÷11=7 ……4(7,4)82÷11=7……5(7,5)83÷11=7……6(7,6)84÷11=7 ……7(7,7)85÷11=7……8(7,8)86÷11=7……9(7,9)87÷11=7 ……10(7,10)88÷11=8……0(8,0)89÷11=8……1(8,1)90÷11=8 ……2(8,2)91÷11=8……3(8,3)92÷11=8……4(8,4)93÷11=8 ……5(8,5)94÷11=8……6(8,6)95÷11=8……7(8,7)96÷11=8 ……8(8,8)97÷11=8……9(8,9)98÷11=8……10(8,10)99÷11=9 ……0(9,0)100÷11=9……1(9,1)101÷11=9……2(9,2)102÷11=9 ……3(9,3)103÷11=9……4(9,4)104÷11=9……5(9,5)105÷11=9 ……6(9,6)106÷11=9……7(9,7)107÷11=9……8(9,8)108÷11=9 ……9(9,9)109÷11=9……10(9,10)110÷11=10……0(10,0)111÷11=10 ……1(10,1)112÷11=10……2(10,2)113÷11=10……3(10,3)114÷11=10 ……4(10,4)115÷11=10……5(10,5)116÷11=10……6(10,6)117÷11=10 ……7(10,7)118÷11=10……8(10,8)119÷11=10……9(10,9)120÷11=10 ……10(10,10)現在我們想將這些數對填入空格中,而且我們希望能讓我們的橫、直、對角線的x座標及y座標總和均相等,我們所利用的方法如下:從左下角開始填入(0,0)分別向下每跳一格加上(1,1) ,(2,3)我們可先得到如下圖結果:因為(6,9)再加(2,3)得到(8,12),我們將12除以11取其餘數一可得座標(8,1)再將其向填入空格中,其餘的座標填法均如上所述,所以我們將所有座標填入後所得到下圖結果(見圖3)觀察上述結果,因為橫、直、對角線他們的x座標及y座標均從0-10出現一次,所以我們可以推測將座標還原成原先代表的數字能夠得到我們要的結論,還原的結果如下:上述方法的優點是:1.我們將原本相當多且複雜的數轉換成座標後,每一個座標所要考慮的對象都變少了(只要考慮0~10)2.因為從(0,0)向x軸、向y軸增加一定的座標。

魔方阵

魔方阵

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。

如3×3的魔方阵:8 1 63 5 74 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.何谓矩阵?矩阵就是由方程组的系数及常数所构成的方阵。

把用在解线性方程组上既方便,又直观。

2.何谓n阶方阵?若一个矩阵是由n个横列与n个纵行所构成,共有个小方格,则称这个方阵是一个n阶方阵。

3.何谓魔方阵?4 9 2 3 5 7 8 1 6定义:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵。

而这个相等的和称为魔术数字。

若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵。

4.最早的魔方阵相传古时为了帮助治水专家大禹统治天下,由水中浮出两只庞大动物背上各负有一图,只有大禹才可指挥其中之由龙马负出的为河图,出自黄河;另一由理龟负出的洛书出自洛河。

洛书5.最早的四阶魔方阵最早的四阶方阵刻在印度一所庙宇石上,年代大约是十一世纪。

古代印度人十分崇拜这种幻方,至今从古神殿的遗址,墓碑上常常还可以发现四阶幻方的遗迹。

奇数魔方阵的规律

奇数魔方阵的规律

奇数魔方阵的规律奇数魔方阵的排列规律如下:1. 将1放在第一行中间一列。

2. 从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1。

3. 如果上一个数的行数为1,则下一个数的行数为n(指最下一行),例如1在第一行,则2应放在最下一行,列数同样加1。

4. 当上一个数的列数为n时,下一个数的列数应为1,行数减去1。

例如2在第3行最后一列,则3应放在第二行第一列。

5. 如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。

例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面。

6. 如果按照上面的规则确定的放置位置超出了数字的排列范围(即行号大于n或列号大于n),则将该数放在此行最下面或最左边。

例如,如果数字9按照上述规则应该放在第3行第3列,但该位置超出了数字的排列范围,因此9将放在第3行的最下面。

7. 无论数字存放在哪个位置,只要按照上述规则进行移动,就可以保证奇数魔方阵的完整性。

这种排列规律是基于一个数学原理,即任何一个奇数都可以表示为1与若干个2、3、4、5、6、7、8、9之和的形式。

因此,按照上述规则排列的奇数魔方阵可以适用于任何一个奇数的情况。

例如,当n=7时,奇数魔方阵如下:1 3 5 7 9 11 13151****086416 17 19 21 23 25 27 28 26 24 22 20 18 16 32 34 36 38 40 42 44 45 43 41 39 37 35 33 48 50 52 54 56 58 60 59 57 55 53 51 49 47 64 66 68 70 72 74 76 77 75 73 71 69 67 65 80 82 84 86 ...。

魔方阵算法(精品)

魔方阵算法(精品)
阵A中,同理填入U*U+1至U*U*2到B中,填入U*U*2+1至U*U*3到C中,填入U*U*3+1至U*U*4
到D中。然后按下列方法交换:
a、将A和D的第一列对应位置的元素(出各自的中间一行外)进行交换;
b、将A和D的中间一列的中间一行的元素进行交换;
c、如果(U+1)/2>2,则将A和D中左边的第二列开始到第(U-1)/2列为止,对应行的数
魔方阵算法(精品)
魔方阵算法2008-11-22 17:12幻方问题分为奇幻方和偶幻方。奇幻方和偶幻方方阵的布阵规律不同,而偶幻方又分为
是4的倍数(如4,8,12,16,20等)和不是4的倍数(如6,10,14,18等)两种。现在
就幻方的三种情形的布阵规律分别加以介绍。
1、奇幻方 N=2*M+1(M=1,2,3,……)的布阵规律
2、①偶幻方N=4*(M=1,2,3,……)的布阵规律
先将1至N*N由小到大的顺序,从第一行开是依序填入N*N的方阵中,然后将N*N的方阵以4
行4列划分为若干个4*4的小方阵,再将所有4*4小方阵的两个对角线上的数字划掉,之后
将所有被划掉的数字重新由大到小的进行排列,然后再将这些数字按排列顺序由N*N方阵
(第二种解释)
a,将1填入第一行中间;
b,将每个数填在前一个数的右上方。
c,若该位置超出最上行,则改填在最下行的对应位置;
d,若该位置超出最右列,则该填在最左列的对应行位置;
e,若某元素填在第一行最右列,下右上角已填了其他数据,则下一个数填在该数同列的下一行位置。
第二步:將中央部分半數的列,所有數字左右翻轉。
第三步:將中央部分半數的行,所有數字上下翻轉。

实验报告魔方阵程序(3篇)

实验报告魔方阵程序(3篇)

第1篇一、实验目的1. 熟悉Python编程语言的基本语法和常用数据结构。

2. 学习使用嵌套循环实现复杂数据结构的构建。

3. 掌握随机数生成和排序算法在程序中的应用。

4. 提高编程能力和问题解决能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容本实验旨在设计一个魔方阵程序,实现以下功能:1. 生成一个nn的魔方阵。

2. 魔方阵中,每一行的数字之和等于n。

3. 魔方阵中,每一列的数字之和等于n。

4. 魔方阵中,对角线的数字之和等于n。

四、实验步骤1. 导入所需的库```pythonimport random```2. 定义一个函数,用于生成nn的魔方阵```pythondef generate_magic_square(n):初始化一个nn的二维数组,用于存储魔方阵的数字 magic_square = [[0] n for _ in range(n)]num = 1 用于存储当前要填充的数字i, j = 0, n // 2 初始化起始位置while num <= n n:将数字num填充到当前位置magic_square[i][j] = numnum += 1判断下一个位置new_i, new_j = (i - 1) % n, (j + 1) % n 如果当前位置已被填充,则移动到新位置if magic_square[new_i][new_j] != 0:i, j = (i + 1) % n, jelse:i, j = new_i, new_jreturn magic_square```3. 定义一个函数,用于检查魔方阵是否正确```pythondef check_magic_square(magic_square, n):检查每一行的数字之和是否等于nfor i in range(n):if sum(magic_square[i]) != n:return False检查每一列的数字之和是否等于nfor j in range(n):if sum(magic_square[i][j] for i in range(n)) != n:return False检查对角线的数字之和是否等于nif sum(magic_square[i][i] for i in range(n)) != n or sum(magic_square[i][n - i - 1] for i in range(n)) != n:return Falsereturn True```4. 主函数```pythondef main():n = int(input("请输入魔方阵的阶数:"))magic_square = generate_magic_square(n)if check_magic_square(magic_square, n):for row in magic_square:print(' '.join(map(str, row)))else:print("生成的魔方阵不正确!")```5. 运行程序```pythonif __name__ == "__main__":main()```五、实验结果当输入阶数n为5时,程序输出如下魔方阵:```1 2 3 4 512 13 14 15 1011 16 17 18 196 7 8 9 205 4 3 2 1```六、实验总结通过本次实验,我们成功设计并实现了一个魔方阵程序。

魔方阵 C语言

魔方阵 C语言

一、幻方按照阶数可分成了三类,即奇数阶幻方、双偶阶幻方、单偶阶幻方。

二、奇数阶幻方(劳伯法)奇数阶幻方最经典的填法是罗伯法。

填写的方法是:把1(或最小的数)放在第一行正中;按以下规律排列剩下的(n×n-1)个数:(1)每一个数放在前一个数的右上一格;(2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;(3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;(4)如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在底行且最左列;(5)如果这个数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。

例,用该填法获得的5阶幻方:三、单偶数阶幻方(斯特拉兹法)所谓单偶阶幻方就是当n不可以被4整除时的偶阶幻方,即4K+2阶幻方。

如(n=6,10,14……)的幻方。

单偶数阶幻方最经典的填法是斯特拉兹法。

填写的方法是:以10阶幻方为例。

这时,k=2。

(1)把魔方阵分为A,B,C,D四个象限,这样每一个象限肯定是奇数阶。

用罗伯法,依次在A象限,D象限,B象限,C象限按奇数阶幻方的填法填数。

(2)在A象限的中间行、中间格开始,按自左向右的方向,标出k格。

A象限的其它行则标出最左边的k格。

将这些格,和C象限相对位置上的数互换位置。

(3)在B象限所有行的中间格,自右向左,标出k-1格。

(注:6阶幻方由于k-1=0,所以不用再作B、D象限的数据交换),将这些格,和D象限相对位置上的数互换位置。

四、源代码如下,已加详细注释#include<stdio.h>#include<stdlib.h>int array[15][15];intinit(int degree) //初始化{inti;int j;for(i=0; i<=degree+1; i++)for(j=0; j<=degree+1; j++)array[i][j] = 0;return 0;}inttest_print(int x, int y, int w, int h) //测试用的,输出以(x,y)为原点,宽为w,高为h,这个区域的数值{inti;int j;for(i=y; i<=y+h-1; i++){for(j=x; j<=x+w-1; j++){printf("%2d ",array[i][j]);}printf("\n");}return 0;}intlao_bo_er(int degree, int x, int y, intnum) //劳伯法{inti;int j;int k;i = y;j = degree/2 + x;for(k=num; k<=num+degree*degree-1; k++){array[i][j] = k;if((k-num+1)%degree == 0){ //如果这个数所要放的格已经有数填入i = (i-y+1)%degree+y;}else{ //每一个数放在前一个数的右上一格i = (i-y-1+degree)%degree+y;j = (j-x+1)%degree+x;}}return 0;}intseq_range(int degree) //把数字按顺序填{inti;int j;intnum;num = 1;for(i=1; i<=degree; i++){for(j=1; j<=degree; j++){array[i][j] = num++;}}return 0;}intsi_te_la_zi(int degree, int x, int y, intnum) //斯特拉兹法{intdeg;int k;int temp;inti;int j;deg = degree/2;lao_bo_er(deg, x, y, num); //用罗伯法,依次在A象限,D象限,B象限,C象限按奇数阶幻方的填法填数lao_bo_er(deg, x+deg, y, num+2*deg*deg);lao_bo_er(deg, x, y+deg, num+3*deg*deg);lao_bo_er(deg, x+deg, y+deg, num+deg*deg);k = (degree-2)/4;for(i=1; i<=deg; i++){ //A象限和C象限对换数据for(j=1; j<=k; j++){temp = array[i][j];array[i][j] = array[i+deg][j];array[i+deg][j]=temp;}for(j=deg+deg/2+1; j>=deg+deg/2-k+3; j--){temp = array[i][j];array[i][j] = array[i+deg][j];array[i+deg][j]=temp;}}for(i=j=1; j<=deg/2+k; j++){ //B象限和D象限对换数据temp = array[i+deg/2][j];array[i+deg/2][j] = array[i+deg+deg/2][j];array[i+deg+deg/2][j]=temp;}return 0;}inthai_er_fa(int degree) //海尔法{inti;int j;int complement;intdeg;seq_range(degree);complement = degree*degree+1;deg = degree/4;for(i=0; i<deg; i++){for(j=0; j<deg; j++){ //对角线上的数字换成和它互补的数array[i*4+1][j*4+1] = complement -array[i*4+1][j*4+1];array[i*4+1][j*4+4] = complement -array[i*4+1][j*4+4];array[i*4+4][j*4+1] = complement -array[i*4+4][j*4+1];array[i*4+4][j*4+4] = complement -array[i*4+4][j*4+4];array[i*4+2][j*4+2] = complement -array[i*4+2][j*4+2];array[i*4+2][j*4+3] = complement -array[i*4+2][j*4+3];array[i*4+3][j*4+2] = complement -array[i*4+3][j*4+2];array[i*4+3][j*4+3] = complement -array[i*4+3][j*4+3];}}return 0;}int main(){int degree;printf("please input the degree\n");scanf("%d",&degree);init(degree);if(degree%2 == 1){ //奇数阶幻方lao_bo_er(degree,1,1,1);test_print(1,1,degree,degree);}else if(degree%4 == 2){ //双偶阶幻方si_te_la_zi(degree, 1, 1, 1);test_print(1,1,degree,degree);}else{ //单偶阶幻方hai_er_fa(degree);test_print(1,1,degree,degree);}return 0;}。

魔方矩阵

魔方矩阵

/*打印魔方阵。

所谓魔方阵是指这样的的方阵:它的每一行、每一列和对角线之和均相等。

输入n,要求打印由自然数1到n^2的自然数构成的魔方阵(n为奇数)。

例如,当n=3时,魔方阵为:8 1 63 5 74 9 2魔方阵中各数排列规律为:①将“1”放在第一行的中间一列;②从“2”开始直到n×n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数同样加1;③如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。

④当上一个数的列数为n时,下一个数的列数应为1,行数减1。

如2在第3行第3列,3应在第2行第1列。

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。

由于6是第1行第3列(即最后一列),故7放在6下面。

*/#include<iostream>using namespace std;int MAX=15;voidprintMagic(int n);void main(){int n=1;cout<<"请输入一个奇数n(如果是偶数则结束):";cin>>n;while(n%2!=0){printMagic(n);cout<<"********************"<<endl;cout<<"请输入一个奇数n:";cin>>n;}}voidprintMagic(int n){int **a,i=0,j=0;a=(int **)malloc(sizeof(int*)*n);while(i<n){a[i]=(int *)malloc(sizeof(int)*n);i++;}int row=0,lin=n/2,tem_row,tem_lin;i=0,j=0;for(i;i<n;i++){for(j;j<n;j++){a[i][j]=0;}j=0;}i=1;for(i;i<=n*n;i++){a[row][lin]=i;tem_row=row;tem_lin=lin;row=(row-1+n)%n;lin=(lin+1)%n;if(a[row][lin]!=0){row=(tem_row+1)%n;lin=tem_lin;}}i=0;j=0;while(i<n){while(j<n){printf("%4d",a[i][j]);j++;}i++;j=0;cout<<endl;}}。

玩魔方的方法

玩魔方的方法

玩魔方的方法魔方,又称魔方阵,是一种古老的智力游戏,由匈牙利建筑学教授鲁本·埃尔诺·鲁比克发明。

魔方的外形是一个立方体,每个面上都有9个小块组成,总共有54个小块。

每个面的9个小块可以自由旋转,目标是使每个面都成为同一种颜色。

玩魔方不仅可以锻炼逻辑思维和手眼协调能力,还可以增强耐心和毅力。

下面将介绍一些玩魔方的方法,希望能帮助初学者更好地掌握这个游戏。

1. 熟悉魔方结构。

首先,要了解魔方的结构。

魔方由中心块、边块和角块组成。

中心块是固定的,不会移动,而边块和角块可以自由旋转。

每个面都有一个中心块,它们的位置是固定的,颜色也是固定的,不会变化。

了解这些结构可以帮助我们更好地理解魔方的运作原理。

2. 学习还原魔方的基本公式。

学习还原魔方的基本公式是玩魔方的第一步。

还原魔方的基本公式包括底层还原、中层还原和顶层还原。

底层还原是将底层9个小块组成一个完整的面,中层还原是将中间层9个小块组成一个完整的面,顶层还原是将顶层9个小块组成一个完整的面。

学会这些基本公式可以帮助我们更好地解决魔方。

3. 练习手法和速度。

练习手法和速度是玩魔方的关键。

在解决魔方的过程中,我们需要熟练掌握旋转和移动的手法,以便更快地还原魔方。

在练习手法和速度的过程中,我们可以使用计时器来记录自己的时间,逐步提高解决魔方的速度,这样可以更好地提高自己的水平。

4. 多解决魔方。

多解决魔方是提高自己水平的有效方法。

在解决魔方的过程中,我们可以遇到各种各样的情况,通过不断地练习和解决,我们可以更好地掌握魔方的技巧和方法。

同时,多解决魔方也可以帮助我们更好地锻炼自己的逻辑思维和手眼协调能力。

5. 参加魔方比赛。

参加魔方比赛是检验自己水平的好方法。

在比赛中,我们可以和其他玩家进行交流和比拼,这样可以更好地了解自己的水平和不足之处,从而更好地提高自己的水平。

总结。

玩魔方是一项需要耐心和毅力的智力游戏,通过不断地练习和解决,我们可以更好地掌握魔方的技巧和方法,提高自己的水平。

n阶魔方阵解题思路

n阶魔方阵解题思路

n阶魔方阵解题思路
解题思路如下:
1. 确定魔方阵的阶数n,魔方阵是一个n x n的矩阵,其中每一行、每一列以及对角线上的元素之和都相等。

2. 创建一个n x n的二维数组,表示魔方阵。

3. 将1放在第一行的中间位置,即第一行的中间列。

4. 从2开始,依次填充魔方阵。

规则如下:
a. 如果当前位置的右上方没有数字,则将当前数字放在右上方;
b. 如果当前位置的右上方有数字,则将当前数字放在下方。

5. 如果当前位置是第一行,则下一个位置应该是最后一列;如果当前位置是最后一列,则下一个位置应该是第一行。

否则,下一个位置是当前位置的右上方。

6. 重复步骤4和步骤5,直到魔方阵被填满。

7. 最后,输出填充完毕的魔方阵。

通过以上步骤,可以得到一个满足条件的n阶魔方阵。

三阶幻方的规律和方法

三阶幻方的规律和方法

三阶幻方的规律和方法
三阶幻方是一种方阵,也又称魔方阵,主要由0-8九个数组成,要求其行、列、对角线相加的和都是15,又称为等式的结果。

三阶幻方的具体建立方法可以有很多,以下就介绍三种比较常见的建立方法:
一、将0-8九个数按图案填到幻方格子中,幻方的中心位置用5来填充。

先从左上角开始,在上行中填入3,8,4。

然后从左上角的第二行开始,在上行中填入6,1,7。

最后要填入的正中间位置是5,这样先把上面的三行填满,下面的三行也就推出了。

一共是九个数,填满就可以形成一个三阶幻方。

二、把一个三阶幻方拆分成九小格,用九个0-8数字重新排列,分四等分,把这九个数字依次从1-9进行排序,形成一个完整的三阶幻方阵。

三、另一种方法就是以空格的方式填写,把上面的三个数字放到每个格子里,再把中间的0放到空格的中间。

根据宫格的大小,一共只能填入八个数,最后一个数就会在格子的旁边。

最后将8个数进行重新排列,便可得到一个三阶幻方。

以上三种方法都可以用来制作三阶幻方,只要掌握了规律,就可以轻松完成。

首先,三阶幻方的规律是,行列对角线相加的和都是15。

其次,三种不同的建立方法可以帮助我们更好地掌握规律,并可以轻松的制作三阶幻方。

然而,解决三阶幻方的规律并不容易,因为其解答是有限的,在解决过程中,需要经过反复的尝试和思考,才能正确的得到答案。

总之,一切取决于你如何思考及如何改变观点,掌握规律,在不断的尝试中,你将会慢慢把三阶幻方解决!。

偶数魔方阵的规律

偶数魔方阵的规律

偶数魔方阵的规律偶数魔方阵啊,那可真是个神奇又有趣的玩意儿!你知道吗,就好像生活中的很多规律一样,偶数魔方阵也有着它自己独特的规则。

咱们就拿4×4 的魔方阵来说吧,那里面的数字就像是一群小精灵,各自有着自己的位置,而且还特别和谐有序。

想象一下,这些数字在方阵里跳来跳去,最后却能组成那么完美的排列,多有意思呀!每个数字都像是找到了属于自己的家,安安稳稳地待在那里。

你看啊,它们横竖斜着加起来的和都是一样的呢!这多神奇呀,就好像有一双无形的手在安排着这一切。

这要是在现实生活中,那不就相当于不管从哪个角度看,事情都能达到一种平衡嘛。

再想想,如果把这个魔方阵比作一个团队,那每个数字就是团队里的一员。

大家都要各司其职,相互配合,才能让整个团队发挥出最大的作用。

这不就和我们平时在工作、学习中一样嘛,只有大家齐心协力,才能把事情做好呀。

而且哦,偶数魔方阵可不止一种玩法呢!你可以试着改变数字的排列顺序,看看能不能发现新的规律。

这就像是我们在生活中不断尝试新的方法,说不定就能找到更棒的解决方案呢。

还有啊,研究偶数魔方阵的时候,可不能着急。

就像我们做事情一样,得一步一个脚印,慢慢去探索。

有时候可能会遇到困难,觉得怎么都搞不明白,但别灰心呀,说不定再坚持一下下,就突然豁然开朗了呢。

你说,这偶数魔方阵是不是就像一个小小的宝藏,等着我们去挖掘它的奥秘呢?它让我们看到了数字的奇妙之处,也让我们明白了很多生活中的道理。

我们可以从中学到耐心、细心,还能学会怎么去寻找规律,解决问题。

所以啊,别小看了这偶数魔方阵,它里面蕴含的智慧可多着呢!大家都快来一起研究研究吧,说不定你就能发现一些别人没发现的好玩意儿!。

把1、2、3、4、5、6、7填在圆圈里,使每一横行竖行上三个数的和都等于15的解题思路

把1、2、3、4、5、6、7填在圆圈里,使每一横行竖行上三个数的和都等于15的解题思路

把1、2、3、4、5、6、7填在圆圈里,使每一横行竖行上三个数的和都等于15的解题思路
这个问题是一个经典的魔方阵(Magic Square)问题,即在一个3x3的格子中填入1至9的数字,使得每一行、每一列以及两条对角线上数字之和都相等。

由于题目要求填入的是1到7这七个数字,而不是1到9,我们可以先构造一个标准的3x3魔方阵,然后去掉最大的两个数8和9,剩下的就是我们需要的数字1到7。

首先,构造一个3x3的魔方阵:
2 9 4
7 5 3
6 1 8
这个魔方阵的每一行、每一列以及两条对角线的和都是15。

接下来,我们去掉数字8和9,剩下的数字就是我们要找的1到7:
2 4
7 3
6 1
现在,我们需要将这些数字重新排列,使得每一行、每一列的和仍然是15。

但是,我们注意到去掉8和9后,每一行或每一列的和应该是1+2+...+7=28除以3,即等于9.333...,这不是一个整数,所以无法直接通过简单的重新排列来得到满足条件的魔方阵。

因此,根据题目的要求,使用1到7的数字是无法构造出一个标准的3x3魔方阵的,因为1到7的和是28,而3x3魔方阵的每行、每列以及对角线的和应该是这个和除以3,即28/3=9.333...,这不是一个整数。

所以,最终答案是:使用数字1到7无法构造出一个标准的3x3魔方阵,使得每一行、每一列的和都等于15。

魔方还原方法

魔方还原方法

魔方还原方法魔方,又称魔方阵、魔方立方,是一种由三个或更多个小正方体组成的立方体拼图。

它有着丰富的变形方式,是一种非常受欢迎的益智玩具。

但是,对于初学者来说,魔方的还原过程可能会显得有些复杂和困难。

在本文中,我将向大家介绍一种简单有效的魔方还原方法,希望能够帮助大家更好地解决这个难题。

首先,我们需要了解魔方的结构。

魔方由中心块、边块和角块组成,中心块是魔方的固定位置,不参与旋转,边块有两种颜色,角块有三种颜色。

在还原魔方的过程中,我们需要根据这些特点来确定还原的顺序和方法。

接下来,我们来具体介绍魔方的还原方法。

首先,我们需要找到一个中心块,作为还原的起点。

然后,我们可以按照以下步骤来进行还原:1. 首先,我们需要还原魔方的底面。

我们可以先将一个颜色的中心块放到底面的中心位置,然后将相邻的边块和角块按照颜色组合放到底面上,形成一个完整的底面。

2. 接下来,我们需要还原魔方的第二层。

我们可以先将一个颜色的中心块放到第二层的中心位置,然后将相邻的边块按照颜色组合放到第二层上,形成一个完整的第二层。

3. 紧接着,我们可以还原魔方的顶面。

我们可以先将一个颜色的中心块放到顶面的中心位置,然后将相邻的边块和角块按照颜色组合放到顶面上,形成一个完整的顶面。

4. 最后,我们需要进行最后一步的还原。

在这一步中,我们需要根据魔方的具体情况来进行调整,直到整个魔方被完全还原。

通过以上的步骤,我们可以比较容易地完成魔方的还原。

当然,这只是一种简单有效的还原方法,对于一些高级的魔方还原问题可能需要更复杂的方法。

但是,对于初学者来说,这种方法已经足够帮助他们解决魔方还原的难题。

总之,魔方是一种非常有趣的益智玩具,它的还原过程也是一种很好的智力挑战。

通过本文介绍的简单有效的还原方法,相信大家可以更好地掌握魔方的还原技巧,享受到这项有趣的挑战。

希望大家都能够成功还原自己的魔方,感受到成功的喜悦和成就感。

C语言魔方阵的三种实现方法

C语言魔方阵的三种实现方法

C语⾔魔⽅阵的三种实现⽅法⽬录魔⽅阵:1.奇数阶魔⽅阵2.偶数阶魔⽅阵(n=4K)3.偶数阶魔⽅阵(n=4K+2)魔⽅阵:把1到n*n排成n⾏n列⽅阵,使⽅阵中的每⼀⾏、每⼀列以及对⾓线上的数之和都相同,即为n阶魔⽅阵。

根据魔⽅阵的规律,我将它分为三种情况。

1.奇数阶魔⽅阵规律:第⼀个数放在第⼀⾏的中间,下⼀个数放在上⼀个数的上⼀⾏下⼀列,若该位置已经有了数字即放在上个数的下⾯⼀⾏的相同列⽤C语⾔编程如下:⽰例:n=5;#include<stdio.h>#include<stdlib.h>#include<assert.h>void Magic1(){#define ROW 5#define COL ROWassert(ROW % 2 != 0); //判断n是否为奇数int arr[ROW][COL] = { 0 }; //定义⼆维数组int currow = 0;int curcol = COL / 2;arr[currow][curcol] = 1;for (int i = 2; i <= ROW * COL; i++){if (arr[(currow - 1 + ROW) % ROW][(curcol + 1) % COL] == 0) //按照规律赋值{currow = (currow - 1 + ROW) % ROW;curcol = (curcol + 1) % COL;}else{currow = (currow + 1) % ROW;}arr[currow][curcol] = i;}for (int i = 0; i < ROW; i++) //打印魔⽅阵{for (int j = 0; j < COL; j++){printf("%-3d", arr[i][j]);}printf("\n");}}int main(){Magic1();return 0;}结果:2.偶数阶魔⽅阵(n=4K)规律:按数字从⼩到⼤,即1,2,3……n顺序对魔⽅阵从左到右,从上到下进⾏填充;将魔⽅阵分成若⼲个4×4⼦⽅阵(如:8阶魔⽅阵可分成四个4×4⼦⽅阵),将⼦⽅阵对⾓线上的元素取出;将取出的元素按从⼤到⼩的顺序依次填充到n×n⽅阵的空缺处。

魔方阵是一种中国人最早发明的数学游戏

魔方阵是一种中国人最早发明的数学游戏

魔方阵是一种中国人最早发明的数学游戏台北市龍山國中數學金頭腦
魔方陣
魔方陣是一種中國人最早發明的數學遊戲,以前稱之為縱橫圖(或縱棋圖、幻方)。

從文字記載來看,幻方的發現,在我國最遲不晚於西元前5世紀。

而國外關於幻方的記載,最早出現在西元130年的希臘著作中,至少要比我國遲了六百多年。

以三階魔方陣為例,將1,2,3,…,9九個數字填入方格內,每一數字均只出現一次,使其中每一列、每一行及對角線的數字和皆相等(古人稱之為九宮數)。

宋人楊輝在公元1275年所著的「續古摘奇算法」上卷在有十三個魔方陣,其中一個是九宮數,其他的階由4至10。

但是百子圖中對角線上的數字之總和不符合魔方陣的規定,後人張潮:清:作更正百子圖把楊光年的百子圖修正為真正的10階魔方陣。

對於魔方陣的解法,咱們中國人還將過程寫成詩句,解說如下:
楊輝《續古摘奇算經》:1275年:
九子斜排上下對易左右相更四維挺進
戴九履一左三右七二四為肩六八為足
九子斜排上下對易左右相更四維挺進
戴九履一
左三右七
二四為肩
六八為足
:敘述此魔方陣的模樣:
本週的金頭腦題目如下:
請將1,2,3,…,8八個數字填入立方體八個頂點的位置,使六個面的數字和皆相等。

台北市龍山國中數學金頭腦。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题3.1、n –魔方阵一、提出问题所谓“n – 魔方阵”是指由1至n 这n 个不同整数构成的魔方阵,其魔方常数为n ( n + 1 ) / 2。

例如,5 – 魔方阵和7 – 魔方阵如图3 – 1所示。

易知,这两个魔方阵的魔方常数分别为15和28。

3215415432432152154354321 ,4321765176543254321762176543654321732176547654321 图3 – 1 5 – 魔方阵和7 – 魔方阵n – 魔方阵的数字排列很有规律,若用人工的方法给出并不困难。

现在要求给出:能让计算机自动输出n (≥ 3)为奇数时形如图3 – 1所示的n – 魔方阵的算法。

二、简单分析n – 魔方阵较我们之后将要讨论的奇、偶数阶魔方阵,要简单许多。

观察后不难发现:1.要填入的n 个数字在阵列的每一行和每一列都要出现且仅出现一次,且各行(列)中的数字顺序相同,这里的顺序是指循环顺序,其中数字1接在数字n 的后面。

2.从阵列的行来看,每一行的第一个数字与它上一行正中间的数字相同。

通过对“n – 魔方阵”的分析,下面几个基本问题必须得到解决:◆ 如何确定阵列第一行各个数字?◆ 在填入其他行的数字时如何保证数字原有的顺序不改变同时每一行的第一个数字正好是其上一行正中间的数字?三、设计准备假设我们要构建的是一个n – 魔方阵,为此定义一个有n 行n 列的二维数组。

1.确定阵列第一行各个数字这里我们处理的方法很简单,即可以利用循环方法顺序地在二维数组第一行中填写1,2,3,…,n 这n 个自然数即可。

2.填入其他行的数字,并保证数字原有的顺序不改变同时每一行的第一个数字正好是其上一行正中间的数字要解决这个问题,需借助一个有n + 1单元的一维数组,并对该数组进行若干次“循环左移”处理。

所谓做一次“循环左移”,即指在一维数组中,将第1个数填入第n + 1个单元,第2个数填入第1个单元,……,第n个数填入第n– 1 个单元,最后再将第n + 1个单元中的数填入第n个单元。

例如,二维数组第二行中各个数字的填入可按下面的方式得到:第一步:在一维数组中依次填入与二维数组中第一行相同的数字;第二步:对一维数组中的数字进行( n– 1 ) / 2次“循环左移”处理;第三步:将一维数组其数字依次填入二维数组的第二行。

由于对数字的处理是“循环左移”,这样数字原有的顺序没有被改变。

而要将处在正中间的数字变成处在第一位,只需将其向左移动( n– 1 ) / 2个单元,因此按上述方法处理后,二维数组中第二行所填入的数字满足我们的要求。

接下来,不断地对一维数组重复上方法的第二步,并将其结果中的数字依次地按顺序填入二维数组中的第三行、第四行,……,第n行即可。

3.其他要求的处理这里我们提出另外的二项要求,即(1)对输入的整数n,要保证是不小于3的奇数,不然就要重新输入;(2)增加对构建好的阵列是否是魔方阵的判断,并对判断的结果输出成功或失败的信息。

对于第一个要求,可通过判断n /2 是否等于INT ( n / 2 ) 和n是否不小于3来实现。

对于第二个要求,可通过比较各行、列、对角线上元素之和是否与n ( n + 1 ) / 2的值相等来实现。

四、实施步骤1.算法编制的工作顺序:有了上述的设计准备,我们所要的算法可按如下的工作顺序编制:第一步:输入奇整数n,并以此定义一维数组S和二维数组A;第二步:将1至n这n个不同整数依次填入S的前n个单元;第三步:通过对数组S实施“循环左移”处理,确定数组A中第二行至第n行中各单元的数字,并输出这些数字;第四步:通过统计各行、列和对角线上各数字的和,判断输出的数字阵列是否是魔方阵。

2.变量设置:N:魔方的阶数;G:行、列和对角线上元素之和;V:每行元素累计和;U:每列元素累计和;S:主对角线上的元素累计和;R:次对角线上的元素累计和;S:为循环左移工作的数组;A:魔方阵(二维数组)。

3.参考框图:如图3 – 2 所示。

4.框图说明:框图应当包含三个功能部分。

第一个部分的功能是判断N是否是一个大于3的奇数;定义S和A两个数组;产生1 ~ N这N个自然数,并存在在S数组里;第二个部分的功能是能够对S数组中的数字循环左移( N– 1 ) / 2次;输出S数组中的数字以表示魔方的行元素,并存放在A数组指定的行中。

实现循环左移(即产生和输出方阵的方法)可参考下面的算法:第01步:让S ( I ) ⇐ I,I = 1,2,…,N;图3 – 2 处理“素数魔方阵”问题的框图第02步:让S ( N + 1 ) ⇐ S ( 1 );第03步:让I⇐ 1;第04步:让K⇐ 1;第05步:让S ( M –1 ) ⇐S ( M ),M = 2,3,…,N + 1;第06步:让S ( N + 1 ) ⇐ S ( 1 );第07步:让K ⇐ K +1,若K≤(N –1)/ 2,则执行第05步;第08步:让A ( I , J ) ⇐S ( J ),输出A ( I , J ),J =1,2,…,N ;第09步:让I⇐ I + 1,若I≤N,则执行第04步;第三个部分的功能是验证所输出的阵列是否正确,并以特别提示信息表示。

我们的验证工作,是通过比较各行、列、对角线上元素之和是否与N ( N + 1 ) / 2的值相等来实现。

而各行、列、对角线上元素之和可参考如下的方式得到:第01步:让I⇐ 1;第02步:让U⇐U + A ( I , J ),J = 1,2,…,N;——产生第I行各元素的和。

第03步:让V⇐V + A ( J , I ),J = 1,2,…,N;——产生第I列各元素的和。

第04步:让P⇐P + A ( I , I );——产生主对角线上各元素的和。

第05步:让Q⇐Q + A ( I , N + 1 –I );——产生从对角线上各元素的和。

第06步:让I⇐I + 1,若I≤N,执行第02步;5.参考算法第01步:输入一个正整数N ;第02步:若N /2 = INT ( N / 2 ) 或N < 3,则执行第01步;第03步:定义数组S ( N + 1 )和A ( N , N ) ;第04步:让I⇐ 1;第05步:让S ( I ) ⇐I,A ( 1 , I ) ⇐I ;第06步:在位置3 ( J– 1 ) + 1处输出S ( J ) ;第07步:让I⇐I + 1,若I≤N ,则返回第05步;第08步:让S ( N + 1 ) ⇐S ( 1 ) ;第09步:换行;第10步:让I⇐ 2 ;第11步:让K⇐ 1 ;第12步:让M⇐ 2 ;第13步:让S ( M– 1 ) ⇐S ( M );第14步:让M⇐M + 1 ,若M≤N + 1,则返回第13步;第15步:让S ( N + 1 ) ⇐S ( 1 ) ;第16步:让K⇐K + 1,若K≤ ( N– 1 ) / 2,则返回第12步;第17步:让J⇐ 1 ;第18步:让A ( I , J ) ⇐S ( J ) ;第19步:在位置3 ( J– 1 ) + 1处输出S ( J ) ;第20步:让J⇐J + 1,若J≤N,则返回第18步;第21步:换行;第22步:让I⇐I + 1,若I≤N,则返回第11步;第23步:让G⇐N ( N + 1 ) / 2 ,S⇐ 0 ,R⇐ 0 ;第24步:让I⇐ 1;第25步:让S⇐S + A ( I , I ) ,R⇐R + A ( I , N + 1 –I ) ;第26步:让V⇐ 0 ,U⇐ 0 ;第27步:让J⇐ 1 ;第28步:让U⇐U + A ( I , J ) ,V⇐V + A ( J , I ) ;第29步:让J⇐J + 1,若J≤N,则返回第27步;第30步:若U + V≠ 2G ,则执行第34步;第31步:让I⇐I + 1 ,若J≤N,则返回第26步;第32步:若S + R≠ 2G ,则执行第34步;第33步:输出“成功信息”,结束.第34步:输出“失败信息”,结束.在参考算法中:第01步至第03步完成输入正整数N并判断是否是不小于3的奇数,同时定义S数组和A数组;第04步至第09步产生1 ~ N个自然数并存放到S数组和A数组的第一行中,输出S数组;第10步至第22步实现S数组中的数字循环左移( N– 1 ) / 2次后输出,并存放在A数组之中。

第23步至第34步完成验证输出的方阵是否正确的工作。

五、评估反思我们所编制的参考算法可以实现对任何大小的“n–魔方阵”(n≥ 3为奇数)的输出,并满足了在提出问题时所给出的所有条件,具有自动判断输出结果是否正确的功能。

参考算法在具体设计时,将魔方阵的验证工作安排在魔方阵的产生和输出之后,这符合一般的验证工作思路。

尤其在处理魔方阵时,让其每个数字的产生与输出同步进行,这使得处理的速度较快。

对于处理n为偶数的n–魔方阵的算法,我们只要对参考算法稍加修改就可方便地得到。

事实上,将参考算法中第02步改为“若N /2 ≠ IMT ( N / 2 ) 或N < 2,则执行第01步”,就得到可处理任何大小的“n–魔方阵”(n≥ 2为偶数)的算法。

更一般地,如果在参考算法中去掉第02步,就得到了处理任何大小的“n–魔方阵”(n为正整数)的算法。

1.关于“循环左移”。

参考算法的关键是实现“填入其他行的数字,并保证数字原有的顺序不改变同时每一行的第一个数字正好是其上一行正中间的数字”这一功能,我们为此采取了―循环左移‖的方法。

对于“循环左移”的方法,下面几点是我们应该了解的。

(1)对数字“循环左移”并没有增减其数字,这就保证了在填写过程中数字原有的顺序不变,而且各行(列)及对角线上都能出现1,2,3,…,n这n个整数且仅出现一次,进而保证了各行(列)及对角线上各数字的和为一个定值,即为1 +2 +3 + … + n =2)1(+nn。

(2)对一行中的数字连续进行( n – 1 ) / 2次“循环左移”,就是将处在第( n + 1 ) / 2位的数字左移到第1位上。

当n为奇数时,第( n + 1 ) / 2位的数字正好就是正中间的数字。

(3)如果改变要求为“每一行的第一个数字正好是其上一行第m个数字”,那么只要对该行的数字连续进行m– 1次“循环左移”即可。

(4)由于n为偶数时n–魔方阵的行不存在“正中间”的数字,可以将“循环左移”次数“( n + 1 ) / 2”修订为“INT (( n + 1 ) / 2 )”,这样可将处在正中间偏左的数字左移至第1位。

(5)若不采用“循环左移”方法来实现所要求的功能,最简单的思路是:确定第i行数字时,可先找到第i– 1行正中间的位置(即第( n + 1 ) / 2个数字),再将所对应的数字填入到第i行的第1个单元之中,其他单元可按顺序填入后续的数字。

相关文档
最新文档