输出n阶魔方矩阵

import java.util.Scanner;


/**
 * 输出n介魔方矩阵。
 * 由1-n*n个数字组成的n*n介方阵,若具有每条对角线,每行、每列的数字都相等的性质,称为N阶魔方矩阵
 * 步骤如下:
 * 1、将数字1放在第一行的中间位置上,即(0,n/2);
 * 2、下一个数字放在当前位置(i,j)的上一行(i-1)、下一列(j-1),即当前位置的右上方。如果出现以下情况,则修改填充位置
 * ------》若当前位置是第一行,下一个数放在最后一行,即把i-1修改为n-1
 * ------》若当前位置是最后一列,下一个位置放在第一列,即把j-1修改为n-1
 * ------》若下一个要放的位置上已经有了数字,则下一个数字放在当前位置的下一行,相同列。
 * 3、重复以上过程,直至将所有数字填入方阵当中
 */

class Magic{
public Magic(int n){
int mat[][] = new int [ n ][ n ] ;
int i = 0 ,j = n/2 ;  //第一个数放在第一行中间位置
for(int k = 1 ; k <= n *n ; k++ ){
mat[i][j] = k ;   //当前位置取值
if( k % n == 0){   //下一个位置已经有值
i = ( i + 1) % n ; // 下一个数的位置在下一行
}else{
i = ( i - 1 + n) % n ;  //下一个数的位置在右上方
j = ( j + 1 ) % n ;
}
}
for ( i = 0 ; i < mat.length ; i++ ){  //输出二维数组
for( j = 0 ; j < mat[i].length ; j++ ){
System.out.print(mat[i][j] + "\t");
}
System.out.println();
}
}
}


public class Cube{
public static void main(String[] args) {

int n = 0 ;
Scanner sc = new Scanner (System.in) ;
System.out.println("请输入魔方阵的阶数n(奇数):");
n =  sc.nextInt() ;
System.out.println( n + "阶魔方阵");
new Magic(n) ;
}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值