package onehundred;
import java.util.Scanner;
class N23{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
System.out.println("请输入行列数(奇数):");
int N=scan.nextInt();
boolean a=true;
if(N<3||N%2==0){System.out.println("Input wrong!"); a=false;}
if(a){
tianShu(N);
}
}
public static void tianShu(int n){
int[][] result=new int[n][n];
int hang=0,lie=n/2;
for(int i=1;i<=n*n;i++){
result[hang][lie]=i;
hang--;
lie++;
if(hang<0&&lie<=n-1){hang=n-1;}//行越界
else if(hang<0&&(lie==n)){hang=hang+2;lie=lie-1;}//行列都越界,放在原格下方
else if(hang>=0&&lie>n-1){lie=0;}//列越界,放在最左边
else if(result[hang][lie]!=0){hang=hang+2;lie=lie-1;}//如果冲突,放在该格下方
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(result[i][j]+" ");
}
System.out.println();
}
}
}原理:
1. 先将1填入第一行正中。
2.沿着右上方填入下一个数字,如果右上方越界,将它水平方向或竖直方向放置。(水平最左端,竖直最下端)

3.如果右上方已有数字,则填在该格下方
4.如果右上方向左向下都不在区域内,仍放在该格下方
6.重复上述步骤,即可填满。 对于大于3行3列的也满足该规律。
本文介绍了一个使用Java实现的魔方阵生成算法。通过用户输入奇数大小的矩阵,程序能够在矩阵内填充数字,遵循从中央开始并向右上方递增的原则。当遇到边界或冲突时,算法会自动调整填充位置,确保最终形成一个完整的魔方阵。
1324

被折叠的 条评论
为什么被折叠?



