九宫格问题
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();
}
}
}