import java.util.Arrays;
public class NNGrid {
public static void main(String[] args) {
int num = 20;// 8*8=64宫格
Integer[][] array = fourTimesGrid(num);
outPutResult(array, num);// 输出结果
checkResult(array, num);// 验证结果
}
public static Integer[][] fourTimesGrid(int num) {
int sortNum = num / 2;// 需要倒排序的行列数
int[] sortArray = new int[sortNum];// 倒排序下标数组
for (int i = 0; i < sortNum / 2; i++) {
sortArray[i] = i * 2;
sortArray[sortNum - 1 - i] = (num - 1) - i * 2;
}
// 初始化宫格数组
Integer[][] array = new Integer[num][num];
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
array[i][j] = i * num + j + 1;
// System.out.print(array[i][j] + " ");
}
}
// 第一步,行倒排序
for (int i : sortArray) {
Integer[] row = array[i];
Arrays.sort(row, 0, row.length, (x, y) -> y - x);
array[i] = row;
}
// 第二步,列倒排序
for (int i : sortArray) {
Integer[] col = new Integer[num];
for (int j = 0; j < num; j++) {
col[j] = array[j][i];
}
Arrays.sort(col, 0, col.length, (x, y) -> y - x);
for (int j = 0; j < num; j++) {
array[j][i] = col[j];
}
}
return array;
}
public static void outPutResult(Integer[][] array, int num) {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(array[i][j] + nul(num, array[i][j]));
}
System.out.println();
}
}
/**
* @msg 输出结果数之间空格
* @2019年8月26日 wxs
*/
public static String nul(int num, int v) {
String NUL = " ";
int len = String.valueOf(num * num).length();
int v_len = String.valueOf(v).length();
int n = len - v_len;
for (int i = 0; i < n; i++) {
NUL += " ";
}
return NUL;
}
/**
* @msg 验证结果
* @2019年8月26日 wxs
*/
public static void checkResult(Integer[][] array, int num) {
int leftObliqueSum = 0;
int rightObliqueSum = 0;
String leftObliqueSumStr = "";
String rightObliqueSumStr = "";
for (int i = 0; i < num; i++) {
int rowSum = 0;
int colSum = 0;
String rowSumStr = "";
String colSumStr = "";
for (int j = 0; j < num; j++) {
rowSum += array[i][j];
rowSumStr += "+" + array[i][j];
colSum += array[j][i];
colSumStr += "+" + array[j][i];
}
System.out.println("row-" + (i + 1) + ":" + rowSumStr.substring(1) + "=" + rowSum);
System.out.println("col-" + (i + 1) + ":" + colSumStr.substring(1) + "=" + colSum);
leftObliqueSum += array[i][i];
leftObliqueSumStr += "+" + array[i][i];
rightObliqueSum += array[num - 1 - i][i];
rightObliqueSumStr += "+" + array[num - 1 - i][i];
}
System.out.println("leftObliqueSum:" + leftObliqueSumStr.substring(1) + "=" + leftObliqueSum);
System.out.println("rightObliqueSum:" + rightObliqueSumStr.substring(1) + "=" + rightObliqueSum);
}
}