目录
  1. 1. Description
  2. 2. Solution
算法-九宫格填法规律--奇数

Description

奇数幻方构造方法:
1)在N*N的第一行中间插入1
2)在插入数据1的的位置的右上方插入数据2,若出边框,即在1的上边框,则2的插入位置是向下移动N个位置
3)在插入数据2的右上方插入数据,若出右边框,则向左移动N个位置,插入3
4)下面的插入数据都是在上一个插入数据的右上角插入,若右上角出了上边框,则向下移动N个位置;若右上角位置出了右边框,则向左移动N个位置;若右上角已经被占,则下一个数的位置是上一个数位置的下面;若右上角是整个N*N的最右边,且被占,则下个插入位置在最右边位置的下面位置。
如下图:

Solution

分五类讨论:

1最右上角一种
2最上面一行(不包括最右上角的那一个)
3最右边一列(同样不包括最右上角的那一个)
4右上角占用
5正常状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package day4;

public class jiugongge {

public static void main(String[] args) {
int N = 7;//n为奇数
int [][]a = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j]=0;
}
}
int i = 0,j = (N-1)/2;
for (int n = 1; n <= N*N; n++) {
a[i][j] = n;
if (i==0&&j==N-1&&a[i][j]!=0) {
i++;
}else if (i==0&&j>=0&&j<N-1) {
i=N-1;
j++;
}else if (i>0&&i<=N-1&j==N-1) {
j=0;
i--;
}else if (a[i-1][j+1]!=0) {
i++;
}else {
j++;
i--;
}
}


for (int ii = 0; ii < N; ii++) {
for (int jj = 0; jj < N; jj++) {
System.out.print(a[ii][jj]+"\t");
}
System.out.println();
}
}

}
文章作者: 李浩
文章链接: https://leehoward.cn/2019/10/15/算法-九宫格填法规律--奇数/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 leehoward
打赏
  • 微信
  • 支付宝

评论