package com.raylew.algorithm.other;
/*
螺旋数:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
要求输入N,输出一个NxN的方阵,例如输入N=4,则输出上面所示的方阵。
*/
public class 螺旋数 {
public static int N = 100;
public static void main(String[] args) {
int i = 0, j = -1;
int flag = 1;
int[][] arr = new int[N][N];
int total = (N % 2 == 0) ? N / 2 : N / 2 + 1;
int num = 1, mark = 0;
while (mark < total && num <= (N * N)) {
if (flag == 1) {//左
j++;
arr[i][j] = num;
if (j == (N - 1 - mark)) {
flag = 2;
}
} else if (flag == 2) {//下
i++;
arr[i][j] = num;
if (i == (N - 1 - mark)) {
flag = 3;
}
} else if (flag == 3) {//右
j--;
arr[i][j] = num;
if (j == mark) {
flag = 4;
}
} else if (flag == 4) {//上
i--;
arr[i][j] = num;
if (i == (mark + 1)) {
flag = 1;
mark++;
}
}
num++;
}
int zws = (N * N + "").length();
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
for (int k = (arr[i][j] + "").length(); k <= zws; k++) {
System.out.print(" ");
}
System.out.print(" " + arr[i][j]);
}
System.out.println("");
}
}
}