中国古代就有关于填写填写九宫格的口诀: 九宫之义,法以灵龟,二四为肩,六八为足,左三右七,戴九履一,五居中央。 那么九宫格就为: 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(); } } }运行的结果如图: 注:此文章并非原创是在网上找到,自己整理出来的。
