蛇形上三角
这是根据我个人的想法来写的,由于学艺不精,难免有不足之处,还请原谅,也欢迎指出。
题目描述:
蛇形矩阵是由1开始的自然数依次排列的一个矩形上三角。
样例输入
本题有多组数据,每组由一个正整数N组成。(N不大于100)(分组测试)
5
1
样例输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要有额外的空行,矩阵三角中同一行的数字用一个空格分开,行尾不要多余的空格。
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
1
解题过程:
个人思路
通过对蛇形矩阵的观察与分析,可以明显得出在这道题目中需要使用二维数组的结论。我在这里,从蛇形矩阵的规律下手。如下所示:
于是在理解上可以将其重新分层,如下图所示:
定义一个二维数组arr[][],则它们对应的为:
则从每层的第一个数组元素arr[a][b]往后推,接下来为arr[a- -][b++],直到与该层层数相同的数组元素(即第n层,有n个元素),且每一层开头的数组元素也为arr[n][0],(n为层数-1)
于是可以用嵌套的循环为数组赋值,外层控制层数,内层控制具体数组元素。再定义一个单独的变量,为数组分配递增的自然数。
注意事项
题目要求的输入输出很严格,否则无法提交成功,故在输出时,应该在每一层的最后一个数组元素后输出一个换行符,即:
if(j==num-i-1) {
System.out.printf("\n");
}
其中num为总层数,j控制内层循环,i控制外层循环。
完整代码如下:
import java.util.Scanner;
public class Aaa{
public static void main(String[] args){
int [][] arr=new int[100][100];
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()) {
int k=1;
int num=scanner.nextInt();
for(int i=0;i<num;i++) {
for(int j=0,p=i,q=0;j<=i;j++) {
arr[p][q]=k++;
if(p==0) {
break;
}
else {
p--;
q++;
}
}
}
for(int i=0;i<num;i++) {
for(int j=0;j<num-i;j++) {
System.out.printf("%d ",arr[i][j]);
if(j==num-i-1) {
System.out.printf("\n");
}
}
}
}
}
}
以上就是我的解题思路与完整代码,希望能帮助大家理解这类蛇形矩阵,不足之处还请指出。