62,614
社区成员
发帖
与我相关
我的任务
分享
public static void test2(int num){
int[][] array = new int[num][num];
int i = 0, j = 0, k = 1;
for (int n = 1; n <= num *(num+1)/2;n++) {
array[i][j] = n ;
switch (k%3){
case 1:
if(j>=num-1-k/3-i){
k++;i++;j--;
continue;
}
j++;
break;
case 2:
if(j<=k/3){
k++;i--;
continue;
}
i++;j--;
break;
case 0:
if (i <= k / 3) {
k++;j++;
continue;
}
i--;
}
}
for (int h = 0; h < num; h++) {
System.out.println(Arrays.toString(array[h]));
}
}
import java.util.*;
public class Test{
int[][] arrays = new int[20][20];
int direction;
int x;
int y;
int index;
public static void main(String[] args){
Test t = new Test();
t.printTest(3);
t.printTest(4);
t.printTest(20);
}
public void printTest(int num){
init();
write(num);
print(num);
}
public void init(){
direction = 1;
x = 0;
y = 0;
index = 1;
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
arrays[i][j] = 0;
}
}
}
public void write(int num){
int sum = num *(num+1)/2;
for(int i=0;i<sum;i++){
switch(direction){
case 1:
if(y<num-1&&arrays[x][y+1]==0){
arrays[x][y++] = index;
}else{
arrays[x++][y--] = index;
direction = 2;
}
index++;
break;
case 2:
if(y>0&&arrays[x+1][y-1]==0){
arrays[x++][y--] = index;
}else{
arrays[x--][y] = index;
direction = 3;
}
index++;
break;
case 3:
if(x>1&&arrays[x-1][y]==0){
arrays[x--][y] = index;
}else{
arrays[x][y++] = index;
direction = 1;
}
index++;
break;
}
}
}
public void print(int num){
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
printNum(arrays[i][j]);
}
System.out.println();
}
}
public void printNum(int num){
int copy = num;
if(copy!=0){
int bits = 1;
while(copy>0){
copy /= 10;
bits++;
}
for(int i=0;i<4-bits;i++){
System.out.print(" ");
}
System.out.print(num);
}
}
}
楼上数学帝额