1 条题解

  • 0
    @ 2026-4-12 9:13:06

    问题分析

    1. 输入:一个十六进制字符串n、一个十进制整数h(代表行数)
    2. 规则:
      • 第一行1个数,第二行2个数……第h行h个数
      • 每个数 = 上一个数 + 十进制h
      • 所有数字转为大写十六进制输出
    3. 格式:每个数占5个字符宽度、左对齐,无额外空格

    C++ 实现代码

    #include <iostream>
    #include <iomanip>   // 用于 setw 格式化输出
    #include <string>
    using namespace std;
    
    int main() {
        string hex_str;  // 输入的十六进制数(字符串形式)
        int h;           // 行数
        cin >> hex_str >> h;
    
        // 第一步:把十六进制字符串转成十进制整数
        int current = stoi(hex_str, nullptr, 16);
    
        // 第二步:循环输出 h 行,第 i 行输出 i 个数
        for (int i = 1; i <= h; ++i) {
            for (int j = 1; j <= i; ++j) {
                // 格式:左对齐,占5个字符,大写十六进制
                cout << left << setw(5) << hex << uppercase << current;
                // 每个数 + 步长 h
                current += h;
            }
            // 一行结束换行
            cout << endl;
        }
    
        return 0;
    }
    

    代码关键说明

    1. 十六进制转十进制
      • stoi(hex_str, nullptr, 16):直接将输入的十六进制字符串转为十进制整数,方便计算。
    2. 格式化输出核心
      • left:左对齐
      • setw(5):每个数字固定占5个字符宽度
      • hex:以十六进制输出
      • uppercase:十六进制字母统一大写
    3. 循环逻辑
      • 外层循环控制行数(1~h)
      • 内层循环控制每行数字个数(第i行i个)
      • 每输出一个数字,current += h 得到下一个数字

    输入输出示例

    输入1

    14 5
    

    输出1

    14
    19   1E
    23   28   2D
    32   37   3C   41
    46   4B   50   55   5A
    

    输入2

    F 6
    

    输出2

    F
    15   1B
    21   27   2D
    33   39   3F   45
    4B   51   57   5D   63
    69   6F   75   7B   81   87
    

    总结

    1. 先将输入的十六进制数转为十进制,方便累加计算
    2. 双重循环控制行数和每行数字数量
    3. 用格式化输出实现左对齐、5字符宽度、大写十六进制
    4. 代码简洁高效,完全符合题目要求,可直接提交
    • 1

    信息

    ID
    252
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者