【算法】程序猿不写代码是不对的38

来源:互联网 发布:vb语言用处 编辑:程序博客网 时间:2024/06/06 10:41
package com.kingdz.algorithm.time201704;/** * 魔术方阵,简捷连续填数法<br/> * 口诀:1立首行中,右1上1,受阻下1<br/> * 由于算法限制只能生成奇数阶的方阵 *  * @author kingdz *  */public class Algo01 {public static void main(String[] args) {int[][] magic = genMagic(7);printMagic(magic);}/** * 打印魔术方阵 *  * @param magic */public static void printMagic(int[][] magic) {for (int i = 0; i < magic.length; i++) {for (int j = 0; j < magic.length; j++) {System.out.print(magic[i][j] + "\t");}System.out.println();}}private static int[][] genMagic(int number) {if (number % 2 == 0) {System.out.println("参数只能是奇数");return new int[number][number];}int[][] magic = new int[number][number];int x = 0;int y = number / 2;int k = 1;magic[x][y] = k;while (k < number * number) {k++;x--;y++;// 判断是否越界if (x < 0) {x = x + number;}if (y >= number) {y = y - number;}// 如果移动后受阻,则回退if (magic[x][y] != 0) {x++;y--;// 判断是否越界if (x >= number) {x = x - number;}if (y < 0) {y = y + number;}}// 如果受阻则下移一位while (magic[x][y] != 0) {x++;if (x >= number) {x = 0;}}// System.out.println(x + "\t" + y + "\t" + k);magic[x][y] = k;}return magic;}}

0 0
原创粉丝点击