方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
给你一个类似的参考http://blog.csdn.net/zqfddqr/article/details/8393172
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);
}
}}楼上数学帝额