幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。奇数幻方有杨辉法,罗伯法(楼梯法)。
| 8 | 1 | 6 |
| 3 | 5 | 7 |
| 4 | 9 | 2 |
以上就是一个3阶幻方(奇数)
罗伯法
把1(或最小的数)放在第一行正中
按以下规律排列剩下的n2-1个数(n表示阶数)
- 每一个数放在前一个数的右上一格;
- 如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
- 如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
- 如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在它的下一行同一列的格内;
- 如果这个数所要放的格已经有数填入,处理方法同(4);
下面是3阶幻方代码。
package lx; public class luobofa1 { public static void main(String[] args) { int [][] a =new int[3][3];//定义一个3x3的数组 int x,y,n=3;//n用来表示几阶 x=0; y=(n-1)/2; int sum1=1; a[x][y]=1; for(int i=0;i<n*n-1;i++) { x=x-1; y=y+1; if(x<0&&y<n)//超出顶端 { x=n-1; a[x][y]=++sum1; }else if(x<n&&x>=0&&y>n-1)//超出右侧 { y=y-n; a[x][y]=++sum1; }else if(x<0&&y>n-1) { //超出顶端且最右侧 x=x+2; y=y-1; a[x][y]=++sum1; }else if(a[x][y]!=0){ //有数填入 x=x+2; y=y-1; a[x][y]=++sum1; }else{ //前一个数的右上一格 a[x][y]=++sum1; } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { System.out.print(a[i][j]+" "); } System.out.println(); } } }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117919.html