九宫格问题

九宫格问题
  n维矩阵,矩阵中数字为0~n^2之间的数,且纵向、横向、斜向上的三个数字之和相等。
请输入要计算的九宫格的维数:
5
17 24 1 8 15 
23 5 7 14 16 
4 6 13 20 22 
10 12 19 21 3 
11 18 25 2 9 

Merzirac法:
(1)第一行居中的方格内(row,col)放1,右上方(row-1,col+1)依次填入2,3,4......
(2)若所放的格超过顶行,那么把它放在底行(底,col+1)
(3)若所放的格超过最右列,那么把它放在最左列(row-1,0)
(4)若右上方已有数字,则向下移一格(row,col-1)

java代码:

import java.util.Scanner;
public class Jiugongge {

    public static void main(String[] args) {
        System.out.println("请输入要计算的九宫格的维数:");
        Scanner s=new Scanner(System.in);
        int x=s.nextInt();
        int row=0;
        int col= x / 2;
        int[][] a=new int[x][x];

        //Merzirac法解九宫格
        for(int i=1;i<= x * x;i++){
            a[row][col]=i;
            row--;
            col++;
            if(row < 0 && col >= x){
                row++;
                col--;
                row++;
            }
            else if(row < 0){
                row = x-1;
            }
            else if(col >= x){
                col = 0;
            }
            else if(a[row][col] > 0){
                row++;
                col--;
                row++;
            }
        }
        for(int j=0 ;j < x;j++){
            for(int k=0;k < x;k++){
                System.out.print(a[j][k] + " ");
            }
            System.out.println();
        }
    }
}
    原文作者:九宫图算法
    原文地址: https://blog.csdn.net/u013982329/article/details/45203761
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞