看射雕上有个神算子瑛姑算九宫求和数独的情节,黄蓉依靠背下来的口诀(戴九履一、左三右七、二八为肩、四六为足、五居其中)完美的实现了:纵横斜线上的数字之和都是十五的问题.
根据以前老师给的口诀(行减列加,不空放下,超限反极),琢磨调试一下,幸而通过,下面给出代码,有需要的可以研究一下.
运行效果如下图:
package com.m;
public class ShuDu {private int num;
private final static int MAX = 5;
ShuDu(int num) {
this.num = num;
}
/*
* 8 1 6 3 5 7 4 9 2
*/
private void paint() {
int data[][] = new int[MAX][MAX];
int col = (num - 1) / 2, row = 0, lastcol,lastrow,count = 1;
data[row][col] = count++;
while (count <= num * num) {
lastrow=row;
lastcol=col;
col++;
row--;
if (col >= num) {
col = 0;
}
if (row < 0) {
row = num - 1;
}
if (data[row][col] == 0) {
data[row][col] = count++;
} else {
row=lastrow+1;
col=lastcol;
if (row >= num) {
row = 0;
}
if (col < 0) {
col = num - 1;
}
data[row][col] = count++;
}
}
printData(data,num);
}
private void printData(int data[][],int num){
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if(data[i][j]>=10){
System.out.print(data[i][j] + " ");
}else{
System.out.print(" "+data[i][j] + " ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
ShuDu mShuDu = new ShuDu(3);
mShuDu.paint();
}
}