罗伯法奇数幻方

幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。奇数幻方有杨辉法,罗伯法(楼梯法)。

816
357
492

以上就是一个3阶幻方(奇数)

罗伯法
把1(或最小的数)放在第一行正中
按以下规律排列剩下的n2-1个数(n表示阶数)

  1. 每一个数放在前一个数的右上一格;
  2. 如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
  3. 如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
  4. 如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在它的下一行同一列的格内;
  5. 如果这个数所要放的格已经有数填入,处理方法同(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();
		}
   }
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值