蓝桥杯普及题:蛇行矩阵
其实刚看到这个题目的时候完全没看懂意思,走进误区了,还以为‘矩阵’这俩字是关键字,还联想到了高数里面的矩阵,后来看了别人的解题思路才发现就是一个简单找规律的题目。
解析:这题的规律有很多种,也有很多实现方法,我简单试了三种方法,这里只记录一种。
先说下这组数据的几个特点:
- 数据的行数和列数由输入的正整数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();
}
}
}
测试效果