You need to enable JavaScript to run this app. 如何在C++中根据输入值生成指定格式的动态数值矩阵?
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中根据输入值生成指定格式的动态数值矩阵?

目标矩阵核心规律

对照给出的5阶样例逐位校验,可提炼出适配任意规模的通用规则:

  • 按行号i、列号j均从1开始计数的约定,矩阵第i行第j列的数值固定为i和j的较小值,即min(i,j)
  • 输出结构为n行n列的完整方阵,不存在逐行缩短的三角结构
  • 样例规则验证:

    第2行(i=2):j=1时min(2,1)=1,j>=2时min(2,j)=2,对应输出1 2 2 2 2,和给出的样例完全匹配
    第5行(i=5):j<5时输出对应列号j,j=5时输出5,对应输出1 2 3 4 5,完全符合预期

原代码的逻辑偏差
  • 内层循环边界设置为j <= n+1-i,导致每一行的输出列数逐行递减(第一行n个元素、第二行n-1个……最后一行仅1个元素),最终输出逐行缩短的倒三角金字塔,而非n列的方阵
  • 未按min(i,j)的规则计算单元格数值,仅按列号顺序输出,数值分布和目标矩阵完全不符
代码调整实现

调整思路完全匹配上述规律,支持任意规模n的动态扩展:

  1. 修正内层循环边界:每一行遍历输出全部n个列元素,即j从1走到n
  2. 单元格取值替换为行号、列号的较小值,直接套用通用矩阵规则
  3. 增加固定宽度的对齐控制,避免数字位数增加时格式错乱,匹配样例的等距输出效果

完整可运行代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int n, i, j;
    cin >> n;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            // 用三元运算取i、j的较小值,无需额外引入头文件
            cout << setw(6) << (i < j ? i : j);
        }
        cout << endl;
    }
    return 0;
}

代码运行效果:

  • 输入n=5时,输出和给出的样例完全一致
  • 输入任意更大的n值,矩阵会自动按照min(i,j)的规则扩展,对齐格式不会错乱,满足无限扩展的需求

内容的提问来源于stack exchange,提问作者bogdan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 08:06:00