package topcoder;
/*
* 下面是一个5*5阶的螺旋方阵.试编程打印出此形式的n*n(n<10)阶的方阵(顺时针方向旋进).
* 1 2 3 4 5
* 16 17 18 19 6
* 15 24 25 20 7
* 14 23 22 21 8
* 13 12 11 10 9
*/
public class screwSquare
{
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("usage: \"java screwSquare integer.\"");
System.exit(0);
}
int i = Integer.parseInt(args[0]);
int[][] matrix = new int[i][i];
int max = i * i;
int row = 0, col = 0;
int direction = 0;
for (int j = 1; j <= max; j++) {
matrix[row][col] = j;
switch (direction) {
case 0:
if (col + 1 >= i || matrix[row][col + 1] > 0) {
direction += 1;
direction %= 4;
row += 1;
} else {
col = col + 1;
}
break;
case 1:
if (row + 1 >= i || matrix[row + 1][col] > 0) {
direction += 1;
direction %= 4;
col -= 1;
} else {
row = row + 1;
}
break;
case 2:
if (col - 1 < 0 || matrix[row][col - 1] > 0) {
direction += 1;
direction %= 4;
row = row - 1;
} else {
col = col - 1;
}
break;
case 3:
if (row - 1 < 0 || matrix[row - 1][col] > 0) {
direction += 1;
direction %= 4;
col += 1;
} else {
row = row - 1;
}
break;
default:
System.out.println("ERROR");
System.exit(0);
}
}
for (int j = 0; j < i; j++) {
for (int k = 0; k < i; k++) {
if (matrix[j][k] < 10)
System.out.print(" " + matrix[j][k]);
else
System.out.print(" " + matrix[j][k]);
}
System.out.println("");
}
}
}
阅读(1723) | 评论(0) | 转发(0) |