本帖最后由 #→_→ 于 2015-9-13 21:30 编辑
public static void main(String[] args) {
int size = 19;// 定义一个长度
// 不需要排列的长度
if (size <= 0) {
System.exit(0);
} else if (size == 1) {
System.out.println(1);
System.exit(0);
}
int x = 1, y = 1;// 定义初始的行列
// 总共需要占用的 行列 x y
while (true) {
if (x * y >= size) {
break;
} else {
x++;
}
while (true) {
if (x * y >= size) {
break;
} else {
y++;
}
break;
}
}
// 定义一个二维数组
int[][] spiral = new int[y][x];
int w = 0, l = 0; // 初始化坐标
// 根据长宽设置坐标
if (x % 2 == 0) {
w = x / 2 - 1;
} else {
w = (x + 1) / 2 - 1;
}
if (y % 2 == 0) {
l = y / 2 - 1;
} else {
l = (y + 1) / 2 - 1;
}
spiral[l][w] = 1;// 初始化坐标和数字
int len = 2;// 等待被写入的数字
// 模拟螺旋写入
for (int n = 1; len <= size; n++) {
if (n % 2 != 0) {
for (int le = 1; len <= size; le++) {
if (le <= n) {
w++;
spiral[l][w] = len++;
} else {
break;
}
}
for (int le = 1; len <= size; le++) {
if (le <= n) {
l++;
spiral[l][w] = len++;
} else {
break;
}
}
} else {
for (int le = 1; len <= size; le++) {
if (le <= n) {
w--;
spiral[l][w] = len++;
} else {
break;
}
}
for (int le = 1; len <= size; le++) {
if (le <= n) {
l--;
spiral[l][w] = len++;
} else {
break;
}
}
}
}
// 打印数组
for (int i = 0; i < spiral.length; i++) {
int[] arr = spiral;
for (int t = 0; t < arr.length; t++) {
System.out.print(arr[t] + "\t");
}
System.out.println();
}
}
|
|