Java处理奇数行列九宫格

本文介绍了一个使用Java实现的魔方阵生成算法。通过用户输入奇数大小的矩阵,程序能够在矩阵内填充数字,遵循从中央开始并向右上方递增的原则。当遇到边界或冲突时,算法会自动调整填充位置,确保最终形成一个完整的魔方阵。
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列的也满足该规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值