罗伯法是什么?
发布网友
发布时间:2022-05-12 04:57
我来回答
共2个回答
热心网友
时间:2023-11-18 01:38
用罗伯法构造幻方 幻方是一种广为流传的数学游戏,据说早在大禹治水时就发现过。幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。下图就是一个用罗伯法排好的5阶幻方。 罗伯法的助记口诀: (初学者可先画出一个N×N的方格阵) 1 居上行正*——数字 1 放在首行最中间的格子中 依次斜填切莫忘——向右上角斜行,依次填入数字 上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中 右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中 重复便在下格填——如果数字{N} 右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中 右上重复一个样——如果朝右上角出界,和“重复”的情况做同样处理 罗伯法的具体方法如下: 把1(或最小的数)放在第一行正中; 按以下规律排列剩下的n2-1个数: 1)每一个数放在前一个数的右上一格; 2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列; 3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行; 4)如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数(例如5)的下一行同一列的格内; 5)如果这个数所要放的格已经有数填入,处理方法同4)。
注意:罗伯法只适用于奇数幻方
热心网友
时间:2023-11-18 01:39
用罗伯法构造幻方
幻方是一种广为流传的数学游戏,据说早在大禹治水时就发现过。幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。
罗伯法的助记口诀:
(初学者可先画出一个N×N的方格阵)
1 居上行正*——数字 1 放在首行最中间的格子中
依次斜填切莫忘——向右上角斜行,依次填入数字
上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中
右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中
重复便在下格填——如果数字{N} 右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中
右上重复一个样——如果朝右上角出界,和“重复”的情况做同样处理
罗伯法的具体方法如下:
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的n2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数(例如5)的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。
只要是有规律的东西,计算机很容易就可以做到。
下面我们把罗伯法翻译成计算机算法思路:
定义一个n×n数组;
把1放在第0行第n\2列;
设当前格为(i?j),设一步长变量k(k=2->n?n)
1) i减1,j加1;
2) 如果i<0那么i=n-1;
3) 如果j>n-1那么j=0;
4) 如果2)和3)同时出现那么就把j减回1,i加上2;
5) 如果a(i?j)不为空那么按照4)处理;
6) 把k的值赋给当前格a(i?j);
继续循环;
输出幻方阵。
参考资料:百度百科