我刚开始学习JAVA的数据结构,刚看了第一章,在做课后习题的时候,碰到了一道很有趣的题,题目是要求输出一个方阵:
当n=4时, 输出 1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16我觉得是转化成数组可以来实现,可在做的时候找不出什么规律。
有不同想法的,欢迎交流。
谢谢!
当n=4时, 输出 1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16我觉得是转化成数组可以来实现,可在做的时候找不出什么规律。
有不同想法的,欢迎交流。
谢谢!
public static void main(String[] args) {
int[][] table = new int[4][4];
for (int i = 0; i < table.length; ++i) {
Arrays.fill(table[i], 0);
} boolean gotoTopRight = true;
int number = 1;
table[0][0] = number++;
int x = 0;
int y = 0;
while (number <= 16) {
int tempX;
int tempY;
if (gotoTopRight) {
tempX = x - 1;
tempY = y + 1;
if (tempX > -1 && tempY < 4 && table[tempX][tempY] == 0) {
// Go far to top-right.
x = tempX;
y = tempY;
table[x][y] = number++;
} else {
// Go to right one step.
tempX = x;
tempY = y + 1;
if (tempX > -1 && tempY < 4 && table[tempX][tempY] == 0) {
x = tempX;
y = tempY;
table[x][y] = number++;
}
gotoTopRight = false;
}
} else {
// Go far to bottom-left.
tempX = x + 1;
tempY = y - 1;
if (tempX < 4 && tempY > -1 && table[tempX][tempY] == 0) {
x = tempX;
y = tempY;
table[x][y] = number++;
} else {
tempX = x + 1;
tempY = y;
if (tempX < 4 && tempY > -1 && table[tempX][tempY] == 0) {
x = tempX;
y = tempY;
table[x][y] = number++;
}
gotoTopRight = true;
}
}
}
for (int i = 0; i < table.length; ++i) {
for (int j = 0; j < table[0].length; ++j) {
System.out.print(table[i][j] + "\t");
}
System.out.println();
}
}
}