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) ;
}
/**
* 输出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) ;
}
}