package com.kingdz.algorithm.time201704;
/**
* 魔术方阵:双向反转法<br/>
*
* <pre>
* 1,将数字由左向右、由上向下顺序填入方阵
* 2,将方阵中间部分半数行的数字左右翻转
* 3,将方阵中间半数列的数字上下翻转
* </pre>
*
* @author kingdz
*
*/
public class Algo06 {
public static void main(String[] args) {
int[][] magic = genMagic(20);
if (magic != null) {
Algo01.printMagic(magic);
}
}
private static int[][] genMagic(int number) {
if (number % 4 != 0) {
System.out.println("只能创建4k阶的方阵");
return null;
}
int[][] magic = new int[number][number];
// 执行第一步
int k = 1;
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
magic[i][j] = k;
k++;
}
}
// 执行第二步
for (int i = magic.length / 4; i <= magic.length / 2; i++) {
for (int j = 0; j < magic.length / 2; j++) {
int tmp = magic[i][j];
magic[i][j] = magic[i][number - j - 1];
magic[i][number - j - 1] = tmp;
}
}
// 执行第三步
for (int i = 0; i < magic.length / 2; i++) {
for (int j = magic.length / 4; j < magic.length / 4 + magic.length / 2; j++) {
int tmp = magic[i][j];
magic[i][j] = magic[number - i - 1][j];
magic[number - i - 1][j] = tmp;
}
}
return magic;
}
}
【算法】程序猿不写代码是不对的39
最新推荐文章于 2023-12-24 16:00:47 发布