奇数九宫格的自动填充

1 需求介绍

作业题目:奇数九宫格的自动填充

作业目的:测试判断语句与循环语句的使用

2 技术描述

  1. 第一行(数组第0行)的正中间放入1。
  2. 下一个数总是放在放好的这个数的右上角45°,考虑有以下两种情况:

行越界:把这个数放到同列的最后一行。

列越界:把这个数放到同行的首列。

  1. 如果遇到n的整数倍数,则放到上个数的正下方,也有两种情况:

行列同时越界。

冲突(位置上已经有了数字)

4.定义二维数组时默认全为0,判断位置上若不为0,则产生冲突。

3 主要功能代码

import java.util.*;

public class Cc {

        public static void show(int[][] b,int n)

        {

            for(int i=0;i<n;i++)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用回溯法实现Java奇数九宫格自动填充。具体实现思路如下: 1. 定义一个二维数组作为九宫格的模板,初始化为0; 2. 从第一行第一列开始,依次尝试填入数字1-9; 3. 每填入一个数字,检查当前行、当前列和当前宫(3x3的小方格)是否已经有重复的数字; 4. 如果没有重复的数字,则继续向下一格填入数字;如果有重复的数字,则回溯到上一格重新填入数字; 5. 当填满最后一格时,输出结果。 下面是Java代码实现示例: ``` public class OddMagicSquare { private static final int GRID_SIZE = 3; private boolean isMagicSquare(int[][] grid) { int magicNum = (GRID_SIZE * (GRID_SIZE * GRID_SIZE + 1)) / 2; // 检查每一行 for (int i = 0; i < GRID_SIZE; i++) { int sum = 0; for (int j = 0; j < GRID_SIZE; j++) { sum += grid[i][j]; } if (sum != magicNum) { return false; } } // 检查每一列 for (int i = 0; i < GRID_SIZE; i++) { int sum = 0; for (int j = 0; j < GRID_SIZE; j++) { sum += grid[j][i]; } if (sum != magicNum) { return false; } } // 检查对角线 int sum = 0; for (int i = 0; i < GRID_SIZE; i++) { sum += grid[i][i]; } if (sum != magicNum) { return false; } sum = 0; for (int i = 0; i < GRID_SIZE; i++) { sum += grid[i][GRID_SIZE - 1 - i]; } if (sum != magicNum) { return false; } return true; } private boolean solve(int[][] grid, int row, int col) { if (row == GRID_SIZE && col == 0) { return isMagicSquare(grid); } if (grid[row][col] != 0) { // 当前格已经有数字,跳过 if (col == GRID_SIZE - 1) { return solve(grid, row + 1, 0); } else { return solve(grid, row, col + 1); } } else { // 尝试填入数字 for (int i = 1; i <= GRID_SIZE * GRID_SIZE; i++) { grid[row][col] = i; if (col == GRID_SIZE - 1) { if (solve(grid, row + 1, 0)) { return true; } } else { if (solve(grid, row, col + 1)) { return true; } } grid[row][col] = 0; } return false; } } public void generateMagicSquare() { int[][] grid = new int[GRID_SIZE][GRID_SIZE]; solve(grid, 0, 0); printGrid(grid); } private void printGrid(int[][] grid) { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { System.out.print(grid[i][j] + " "); } System.out.println(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值