文章

【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$。


题目分析

解题思路

这道题目主要考察多层循环和矩阵的构造。让我们来分析一下解题思路:

  1. 理解题目要求
    • 构造一个n行m列的矩阵
    • 矩阵中第i行第j列的元素为i×j
    • 要求每行和每列都是等差数列
  2. 分析矩阵特点
    • 每一行是以i为公差的等差数列
    • 每一列是以j为公差的等差数列
    • 第i行的首项是i
    • 第j列的首项是j
  3. 实现方案
    • 使用双重循环遍历矩阵
    • 外层循环控制行号i
    • 内层循环控制列号j
    • 每个位置填入i×j
  4. 代码实现要点
    • 外层循环:i从1到n
    • 内层循环:j从1到m
    • 每个数字后输出空格
    • 每行末尾换行
  5. 复杂度分析
    • 时间复杂度:O(n×m)
    • 空间复杂度:O(1)
  6. 注意事项
    • 输入的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 进行授权