package circlenum;
/**
*
* @author xcm
* 腾讯的在线笔试题,输入一个矩(方)阵的大小n,输出其回型矩(方)阵,例如
* 输入3,输出
* 1 2 3
8 9 4
7 6 5
输入4,输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
具体的思路就是依次按照四个方向遍历每一个圈
*/
public class CirCleNumber {
public static void main(String[] args) {
int n = 4;//需要改成标准输入System.in
if (n == 1) {
System.out.println(1);
return;
}
int[][] data = new int[n][n];
int i = 0, j = 0;
int num = 1;
int direction = 1;//方向
int circle = 0;//第几圈,从0开始
while (num <= n * n) {
data[i][j] = num;
num++;
if (j < n - 1 && data[i][j + 1] == 0 && direction == 1) {
j++;
continue;
} else {
direction = 2;
}
if (i < n - 1 && data[i + 1][j] == 0 && direction == 2) {
i++;
continue;
} else {
direction = 3;
}
if (j > 0 && data[i][j - 1] == 0 && direction == 3) {
j--;
continue;
} else {
direction = 4;
}
if (i > 0 && data[i - 1][j] == 0 && direction == 4) {
i--;
continue;
} else {
circle++;
i = circle;//到下一圈
j = circle;//到下一圈
direction = 1;
}
}
print(data);
}
public static void print(int[][] data) {
int n = data.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(data[i][j] + "\t");
if ((j + 1) % n == 0) {
System.out.println();
}
}
}
System.out.println();
}
}
转载于:https://my.oschina.net/u/2360415/blog/652156