蓝桥杯普及题:蛇行矩阵

其实刚看到这个题目的时候完全没看懂意思,走进误区了,还以为‘矩阵’这俩字是关键字,还联想到了高数里面的矩阵,后来看了别人的解题思路才发现就是一个简单找规律的题目。

解析:这题的规律有很多种,也有很多实现方法,我简单试了三种方法,这里只记录一种。

先说下这组数据的几个特点:

  • 数据的行数和列数由输入的正整数N决定,也就是说整个上三角形由N行、N列组成。
  • 每行数据的个数和当前行的所在行数成反比。
  • 整个矩阵相当于一个二维数组。
  • 第一行的第一个数字固定是1。
  • 从第二行开始(包括第二行),每行的首个数字符合:'每行的第一个数字'='上一行的第一个数字'+'上一行的所在行数'。
  • 每行数据中,相邻的两个数相差的大小row符合:row = row + '当前行数' + '左边数字所在列数'。

我这里总共列了6个特点,前三个特点决定了这个矩阵的形状是一个上三角形,第5个特点决定了每行的首个数字,第6个特点决定了每行中的所有数据。其实这题除了找规律以外,我一直不知道要考察的知识点是什么,难道是要考察二维数组么,get不到这题的点。

package _12_26_test;

import java.util.Scanner;

import javax.sound.midi.Soundbank;

public class four {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);

		int N = scanner.nextInt();

		int Num = N;
		// 用于存放行中的每个数据
		int row = 1;
		// 用于存放每行的首个数据
		int rank = 1;
		// 代表当前行
		for (int k = 1; k <= N; k++) {

			// 代表当前列
			for (int i = 1; i <= Num; i++) {

				// 输出每行中的数字
				System.out.print(row + "\t");
				// 得到当前行的下一个数据
				row = row + k + i;

			}

			// 得到每行中的首个数字
			rank = rank + k;

			// 将下一行的首个数据赋值给row
			row = rank;

			// 每行数据的个数逐渐递减
			Num--;

			System.out.println();

		}

	}

}

测试效果

posted @ 2020-04-07 14:50  西红柿里没有番茄  阅读(155)  评论(0编辑  收藏  举报