蛇形上三角

这是根据我个人的想法来写的,由于学艺不精,难免有不足之处,还请原谅,也欢迎指出。

题目描述:

蛇形矩阵是由1开始的自然数依次排列的一个矩形上三角。

样例输入

本题有多组数据,每组由一个正整数N组成。(N不大于100)(分组测试)

5
1

样例输出

对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要有额外的空行,矩阵三角中同一行的数字用一个空格分开,行尾不要多余的空格。

1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
1

解题过程:

个人思路

通过对蛇形矩阵的观察与分析,可以明显得出在这道题目中需要使用二维数组的结论。我在这里,从蛇形矩阵的规律下手。如下所示:

LSNU 蛇形矩阵 java实现
于是在理解上可以将其重新分层,如下图所示:
LSNU 蛇形矩阵 java实现

定义一个二维数组arr[][],则它们对应的为:
LSNU 蛇形矩阵 java实现

则从每层的第一个数组元素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");
				}
			}
		}
		}
	}
}

以上就是我的解题思路与完整代码,希望能帮助大家理解这类蛇形矩阵,不足之处还请指出。

相关文章:

  • 2021-11-19
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-25
  • 2022-12-23
  • 2021-06-17
相关资源
相似解决方案