描述
1 2 3 4 5 12 13 14 6 11 15 7 10 8 9跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
-
输入
-
第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000
输出
输出之后填好之后的图
package MainTest;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int k=in.nextInt();
while(k-->0){
int n=in.nextInt();
int[][] a=new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
a[i][j]=0;
}
int count=1;
int x=0,y=0;
a[x][y]=1;
//蛇形填数的变形,蛇形是控制四个方向,这个是三个方向,思路还是一样,控制数组下标变化即可
while(count<((n*(n+1))/2)){
while(y<n-1&&a[x][y+1]==0) {a[x][++y]=++count;}
while(x<n-1&&y>0&&a[x+1][y-1]==0){a[++x][--y]=++count;}
while(x>0&&a[x-1][y]==0) {a[--x][y]=++count;}
}
//注意此处的打印方法,去掉不必要的列,只打印需要的列,思想借鉴!!!!
for(int i=0;i<n;i++) {
for(int j=0;j<n-i-1;j++){
System.out.print(a[i][j]+" ");
}
System.out.print(a[i][n-i-1]);
System.out.println();
}
}
}
}
回顾:打印形状这类题,实质就是观察图形行和列的变化规律,结合数组下标变化即可,一定主要变化方向和数组越界问题,同时打印结果也要学会控制