中国古代就有关于填写填写九宫格的口诀:
九宫之义,法以灵龟,二四为肩,六八为足,左三右七,戴九履一,五居中央。
那么九宫格就为:
4 9 2
3 5 7
8 1 6
或:
2 9 4
7 5 3
6 1 8
填写九宫格的口诀:
1 居上行正中央,依次斜填切莫忘,上出框界往下写,右出框时左边放,重复便在下格填,出角重复一个样。
1 居上行正中央——数字 1 放在首行最中间的格子中;
依次斜填切莫忘——向右上角斜行,依次填入数字;
上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中;
右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中;
重复便在下格填——如果数字{N}右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中;
出角重复一个样——如果朝右上角出界,和“重复”的情况做同样处理。
九宫格(3阶幻方)不止这一种填法,只要间1放于四个边格的正中,向幻方外侧依次斜填其余数字;若出边,将数字另一侧;若目标格已有数字或出角,回一步填写数字,再继续按一开始的相同方向依次斜填其余数字。
(说简单点:就是将上图的九宫格旋转一圈产生的四个方向上的幻方,和将上图的九宫格先水平翻转,再旋转一圈产生的四个方向上的幻方)
3阶幻方的填法如下8种:
第一种:
8 1 6
3 5 7
4 9 2
第二种:
6 1 8
7 5 3
2 9 4
第三种:
4 9 2
3 5 7
8 1 6
第四种:
2 9 4
7 5 3
6 1 8
第五种:
6 7 2
1 5 9
8 3 4
第六种:
8 3 4
1 5 9
6 7 2
第七种:
2 7 6
9 5 1
4 3 8
第八种:
4 3 8
9 5 1
2 7 6
java里面实现的代码如下:
import java.util.Scanner;
public class JiuGongGe {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要计算的九宫格的维数:");
int x = sc.nextInt();
int h = 0;
int l = x / 2;// 让1在第一行中间的位置
int a[][] = new int[x][x];
for (int i = 1; i <= x * x; i++) {
a[h][l] = i;
h--;
l++;
if (h < 0 && l >= x) {
h++;
l--;
h++;
} else if (h < 0) {
h = x - 1;
} else if (l >= x) {
l = 0;
} else if (a[h][l] > 0) {
h++;
l--;
h++;
}
}
System.out.println("计算结果如下:");
for (int j = 0; j < x; j++) {
for (int k = 0; k < x; k++) {
System.out.print(a[j][k] + " ");
}
System.out.println();
}
}
}
运行的结果如图:
注:此文章并非原创是在网上找到,自己整理出来的。