JAVA 输入任何奇数 完成九宫格填数

这篇博客介绍了如何使用Java实现九宫格填数,遵循特定策略:最小值在最上行中间,最大值在最下行中间。通过判断行、列的位置变化,结合回溯法填充数字,确保每一行、每一列、对角线上的数字和相等。提供了具体代码实现,并展示了3x3和5x5的示例输出。
摘要由CSDN通过智能技术生成

场景:九宫格的同一行,同一列,同对角线上的数字加起来相等

实现九宫格可使用以下策略:

1、最小值永远在最上行的中间格,最大值永远在最下行的中间格。
2、最上行碰壁,下一个数填入右列最下格。  
3、最右列碰壁,下一个数填入上一行最左格。
4、右上格有空就一直填下一个数;右上格有数,就将下一个数字填入上一个数的下一格。 
5、右上角的下一个数,必定在其下一格;左下角的上一个数,必定在其上一格。

具体代码实现思路:

1.先定义一个一个int型的二维数组arr,并定义及初始化变量,行row=0,列col=n/2(n为二维数组的列);

定义变量x=1用于后续遍历。
2.设置九宫格第一行中间一个格子的值为1;
3.使用while循环,当x<=n*n时,进入循环并作以下判断
1)从当前数字的右上角开始填下一个数字,如果下个数字超出当前行,row=当前数组长度-1,继续向右上角填数字
2)同时列右移加1,如果列超出边界,就将其设置为0
3)判断当前格子中是否有数字,如果值为0,代表没有填过数字,此时,设置当前格子的值为目前循环的数字。
4)如果当前格子中有数字,这里就要用到回溯法,在循环的最开始记录当前的行,列。然后设置行加

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值