用java语言的循环和数组如何做出回形矩阵?
解决方案 »
- 用socket进行并发TCp通讯遇到问题
- 帮我看看,哪儿错了?
- "java.lang.NoClassDefFoundError: org/apache/log4j/Appender"异常
- 关于swing布局的问题
- 请教大家一个问题,菜鸟问题!
- 垃圾回收的问题
- 一个字符串类型的变量,保存sql,执行时总是说 ORA-00911: 无效字符,为什么????????????????????????????????
- 关于文件保存和打开的问题(急急急)
- 请问什么原因:After end of result set ?
- 谁能帮我做下这个,头疼了几天了5555~~
- 二进制文件数据怎么用java读取
- java无限扩展
int[] rc = { 0, 0 };
for(int s = 0, t = N * 2 - 1, n = 1; s < t; s++) {
int p = N - (s + 1) / 2;
while(p-- > 0) {
spiralMatrix[rc[0]][rc[1]] = n++;
changeIndex(rc, s, p);
}
}
print(spiralMatrix);
} private static void changeIndex(int[] rc, int turn, int p) {
if(p == 0) {
turn++;
}
rc[turn & 0x1] += 2 - (turn & 0x3 | 0x1);
} private static void print(int[][] matrix) {
for(int i = 0; i < matrix.length; i++) {
for(int j = 0; j < matrix[i].length; j++) {
if(j > 0) {
System.out.print(' ');
}
System.out.printf("%2d", matrix[i][j]);
}
System.out.println();
}
}
}
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
if(p == 0) {
turn++;
}
rc[turn & 0x1] += 2 - (turn & 0x3 | 0x1);
}改成这样会更好一些: private static void changeIndex(int[] rc, int turn, int p) {
if(p == 0) {
turn++;
}
rc[turn & 0x1] += 1 - (turn & 0x2);
}
自己写的平民版程序:
public static int[][] createRoundArray(int n) {
int[][] roundArray = new int[n][n];
int[] add = { 1, 0 };
int size = n*n;
int x = 0;
int y = 0;
for (int i = 1; i <= size; i++) {
roundArray[x][y] = i;
int row = x + add[0];
int column = y + add[1];
if (row >= 0 && row < n && column >= 0 && column < n
&& roundArray[row][column] == 0) {
x = row;
y = column;
} else {
if (add[0] == 1) {
add[0] = 0;
add[1] = 1;
y = y + 1;
} else if (add[1] == 1) {
add[0] = -1;
add[1] = 0;
x = x - 1;
} else if (add[0] == -1) {
add[0] = 0;
add[1] = -1;
y = y - 1;
} else if (add[1] == -1) {
add[0] = 1;
add[1] = 0;
x = x + 1;
}
}
}
return roundArray;
}