You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用C++实现用户指定层数的递增字母正方形绘制

解决C++字母正方形图案绘制问题

问题分析

你需要实现的是根据输入的层数生成对称字母正方形,核心逻辑是:每个位置的字母由该位置到正方形四个边界的最小距离决定——距离边界越近(越靠外层),字母越大;距离边界越远(越靠近中心),字母越小,从外层的第n个字母递减到中心的A。

现有代码问题

  • 循环行列索引范围错误,导致输出列数多一列
  • 条件判断仅考虑了行列相对大小,未处理上下对称,无法生成正确的对称图案
  • 使用小写字母,与示例的大写格式不符
  • 输出包含多余空格,不符合示例要求

修正后的代码

#include <iostream>
#include <algorithm> // 用于多参数min函数
using namespace std;

int main()
{
    int layers;
    cout << "How many layers? " << endl;
    cin >> layers;
    int size = 2 * layers - 1;

    for (int row = 0; row < size; ++row)
    {
        for (int col = 0; col < size; ++col)
        {
            // 计算当前位置到上下左右四个边界的最小距离
            int min_distance = min({row, col, size - 1 - row, size - 1 - col});
            // 外层对应最大字母,往内每层字母递减
            char current_char = 'A' + (layers - 1 - min_distance);
            cout << current_char;
        }
        cout << endl;
    }
    return 0;
}

关键逻辑说明

  1. 边长计算:层数为layers时,正方形边长是2*layers-1,比如4层对应7列7行
  2. 最小距离计算:min({row, col, size-1-row, size-1-col})获取当前位置到四个边界的最近距离,这个值决定了当前位置属于哪一层
  3. 字母映射:外层(最小距离为0)对应'A' + layers-1(比如4层对应'D'),往内每一层最小距离加1,字母减1,直到中心位置最小距离为layers-1,对应字母'A'
  4. 格式对齐:行列索引从0开始,循环范围覆盖完整边长,且输出无多余空格,与示例格式完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:25:20