上三角 螺旋矩阵 大神们 帮忙瞅一下

gaoshung 2013-03-08 07:27:25
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充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或更高版本。
...全文
391 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianglewa1 2013-04-18
  • 打赏
  • 举报
回复 1
引用 8 楼 bao110908 的回复:
请不要把你的考试题目往这里贴,谢谢! 这里是交流技术的 BBS,而不是帮人写作业、考试的枪手论坛!
真自我感觉良好,比赛完了就不能交流题目了?
  • 打赏
  • 举报
回复
请不要把你的考试题目往这里贴,谢谢! 这里是交流技术的 BBS,而不是帮人写作业、考试的枪手论坛!
gukuitian 2013-03-15
  • 打赏
  • 举报
回复
    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]));
	}
    }
小双 2013-03-15
  • 打赏
  • 举报
回复

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

}
楼上数学帝额
gaoshung 2013-03-14
  • 打赏
  • 举报
回复
能详细说说嘛?我几乎没有思路
zqfddqr 2013-03-14
  • 打赏
  • 举报
回复
网上收个c的设个n值我估计都不用改就java话了 http://blog.csdn.net/vinci_lau/article/details/7296238
zqfddqr 2013-03-14
  • 打赏
  • 举报
回复
想写的简练不容易 想写出来还是可以的 一点一点实现呗 给你一个类似的参考http://blog.csdn.net/zqfddqr/article/details/8393172
jesserykisscy 2013-03-09
  • 打赏
  • 举报
回复
j++,j=,OK 我很喜欢

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧