时间限制: 2s 内存限制: 128MB 提交: 24039 解决: 15768
题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入格式
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出格式
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
代码
#include<iostream>#include<vector>usingnamespace std;voidprintSnakeMatrix(int N){ vector<vector<int>> matrix(N);// 初始化第一列int first_col_value = 1;for (int i = ; i < N; i++) { matrix[i].push_back(first_col_value); first_col_value += i + 1; }// 填充每一行的后续元素for (int i = ; i < N; i++) {int diff = i + 2; // 初始差值为行号+2for (int j = 1; j < N - i; j++) { matrix[i].push_back(matrix[i].back() + diff); diff++; } }// 输出矩阵for (int i = ; i < N; i++) {for (int j = ; j < matrix[i].size(); j++) { cout << matrix[i][j];if (j != matrix[i].size() - 1) { cout << " "; } } cout << endl; }}intmain(){int N;while (cin >> N) {printSnakeMatrix(N); }return;}
输出结果
代码讲解
(1)初始化第一列:
第一列的值遵循特定规律:1, 2, 4, 7, 11, ...
每个值与前一个值的差递增:+1, +2, +3, +4,...
(2)填充每行后续元素:
每行的差值从行号+2开始递增
例如第0行差值从2开始,第1行从3开始,依此类推
(3)输出控制:
使用vector存储矩阵
精确控制输出格式,避免行尾多余空格
示例演示
以样例输入N=5为例:
(1)初始化第一列:[1, 2, 4, 7, 11]
(2)填充各行:
第0行:1 (+2)→3 (+3)→6 (+4)→10 (+5)→15
第1行:2 (+3)→5 (+4)→9 (+5)→14
第2行:4 (+4)→8 (+5)→13
第3行:7 (+5)→12
第4行:11
(3)输出结果与样例一致
优化说明
使用vector动态存储矩阵,适应不同N值
避免使用二维数组,节省空间
差值计算直接基于行号,效率高
输出格式严格控制,符合题目要求
C++基础教程合集
C++基础资料1、C++输出2、C++变量3、C++输入4、C++表达式5、IF判断语句6、IF应用7、WHILE循环语句8、FOR循环语句9、数组10、一维数组11、二维数组12、C++函数13、C++文件操作 - 写文件操作