方阵的主对角线之上称为“上三角”。
请你设计一个用于填充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或更高版本。

解决方案 »

  1.   

    想写的简练不容易 想写出来还是可以的 一点一点实现呗 
    给你一个类似的参考http://blog.csdn.net/zqfddqr/article/details/8393172
      

  2.   

    网上收个c的设个n值我估计都不用改就java话了 http://blog.csdn.net/vinci_lau/article/details/7296238
      

  3.   

        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]));
    }
        }
      

  4.   


    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);
    }
    }}楼上数学帝额
      

  5.   

    请不要把你的考试题目往这里贴,谢谢!这里是交流技术的 BBS,而不是帮人写作业、考试的枪手论坛!