【GESP】C++二级真题 luogu-B4259 [GESP202503 二级] 等差矩阵
GESP二级真题,多层循环练习,难度★✮☆☆☆。
luogu-B4259 [GESP202503 二级] 等差矩阵
题目要求
题目描述
小 A 想构造一个 $n$ 行 $m$ 列的矩阵,使得矩阵的每一行与每一列均是等差数列。小 A 发现,在矩阵的第 $i$ 行第 $j$ 列填入整数 $i \times j$,得到的矩阵能满足要求。你能帮小 A 输出这个矩阵吗?
输入格式
一行,两个正整数 $n, m$。
输出格式
共 $n$ 行,每行 $m$ 个由空格分割的整数,表示小 A 需要构造的矩阵。
输入输出样例 #1
输入 #1
1
3 4
输出 #1
1
2
3
1 2 3 4
2 4 6 8
3 6 9 12
说明/提示
对于所有测试点,保证 $1\leq n,m \leq 50$。
题目分析
解题思路
这道题目主要考察多层循环和矩阵的构造。让我们来分析一下解题思路:
- 理解题目要求
- 构造一个n行m列的矩阵
- 矩阵中第i行第j列的元素为i×j
- 要求每行和每列都是等差数列
- 分析矩阵特点
- 每一行是以i为公差的等差数列
- 每一列是以j为公差的等差数列
- 第i行的首项是i
- 第j列的首项是j
- 实现方案
- 使用双重循环遍历矩阵
- 外层循环控制行号i
- 内层循环控制列号j
- 每个位置填入i×j
- 代码实现要点
- 外层循环:i从1到n
- 内层循环:j从1到m
- 每个数字后输出空格
- 每行末尾换行
- 复杂度分析
- 时间复杂度:O(n×m)
- 空间复杂度:O(1)
- 注意事项
- 输入的n和m都是正整数
- 数字间要用空格分隔
- 每行末尾要换行
- 注意数据范围:1≤n,m≤50
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main() {
// 定义行数n和列数m
int n, m;
// 从控制台读入n和m
cin >> n >> m;
// 外层循环控制行数
for (int i = 1; i <= n; i++) {
// 内层循环控制列数
for (int j = 1; j <= m; j++) {
// 输出第i行第j列的数值,即i*j,数字间用空格分隔
cout << i * j << " ";
}
// 每行结束后换行
cout << endl;
}
// 程序结束
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权