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(); } }