早教吧 育儿知识 作业答案 考试题库 百科 知识分享

有关JAVA.方阵的主对角线之上称为“上三角”。请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。例

题目详情
有关JAVA.
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充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)
▼优质解答
答案和解析

我做了一个小时,终于大功告成啊!有成就感,上代码

import java.util.Scanner;

public class Trangle {

public Trangle(){

System.out.println("请输入数字3--20");

Scanner sc=new Scanner(System.in);

int input=sc.nextInt();

if(input<3||input>20){

System.out.println("数字范围错误");

return;

}

//定义矩阵

int[][] matrix=new int[input][input];

//初始化矩阵为-1,后面用于输出判断

for(int i=0;i<input;i++){

for(int j=0;j<input;j++){

matrix[i][j]=-1;

}

}

//三角形的三条边,横着斜着竖着

int status=1;

//三角型循环的次数

int time=0;

//当前的数字

int index=1;

//我们知道这个三角矩阵是有一个一个大小不同的三角形

//组成的,1234,567,89.他们的长度是递减的,线面循环的i即表示边长

for(int i=input;i>0;i--){

//表示横着的边

if(status==1){

//在每个相应的坐标上把当前数字index写进去

for(int j=0;j<i;j++){

matrix[time][time+j]=index;

index++;

}

status=2;

}else if(status==2){//斜着的边

for(int j=0;j<i;j++){

matrix[time+1+j][input-2-time*2-j]=index;

index++;

}

status=3;

}else if(status==3){//竖着的边

for(int j=0;j<i;j++){

matrix[input-2-time*2-j][time]=index;

index++;

}

status=1;

time++;//表示从外到内三角形的个数

}

}

//输出我们处理好的这个矩阵

for(int i=0;i<input;i++){

for(int j=0;j<input;j++){

//是-1的地方就不要输出了

if(matrix[i][j]==-1){

break;

}

if(matrix[i][j]<10){

System.out.print(matrix[i][j]+"   ");

}else if(matrix[i][j]<100){

System.out.print(matrix[i][j]+"  ");

}else{

System.out.print(matrix[i][j]+" ");

}

}

System.out.println("");

}

}

public static void main(String[] args){

new Trangle();

}

}

强烈建议楼主采纳最佳答案哟!可以看一下效果图

看了 有关JAVA.方阵的主对角线...的网友还看了以下: