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

如何用C++实现空心星号三角形并绘制指定样式英国国旗?

实现指定的空心星号国旗样式

首先,你需要实现的目标样式如下:

*******************
**       *       **
* *      *      * *
*  *     *     *  *
*   *    *    *   *
*    *   *   *    *
*     *  *  *     *
*      * * *      *
*       ***       *
*******************
*       ***       *
*      * * *      *
*     *  *  *     *
*    *   *   *    *
*   *    *    *   *
*  *     *     *  *
* *      *      * *
**       *       **
*******************

你提到已经掌握实心星号三角形和空心矩形的实现,但不清楚如何实现内部空心的三角形,以下是针对这个需求的解决方案:

分析图案结构

这个图案由以下几部分组成:

  • 顶部和底部的实心边框(17个星号)
  • 上半部分:8行对称的空心三角形,每行在固定位置输出星号,其余位置为空格
  • 中间的实心分隔边框
  • 下半部分:与上半部分对称的8行空心三角形

实现代码

#include <iostream>
using namespace std;

int main(void) {
    const int WIDTH = 17; // 图案总宽度
    const int TRIANGLE_ROWS = 8; // 单半部分三角形的行数

    // 打印顶部边框
    for (int i = 0; i < WIDTH; i++) {
        cout << "*";
    }
    cout << endl;

    // 打印上半部分空心三角形
    for (int row = 1; row <= TRIANGLE_ROWS; row++) {
        for (int col = 0; col < WIDTH; col++) {
            // 判断当前位置是否需要输出星号
            if (col == 0 || col == WIDTH - 1 || // 左右边缘
                col == row || col == WIDTH - 1 - row || // 左右三角形的斜边
                col == WIDTH / 2) { // 中间的竖线
                cout << "*";
            } else {
                cout << " ";
            }
        }
        cout << endl;
    }

    // 打印中间分隔边框
    for (int i = 0; i < WIDTH; i++) {
        cout << "*";
    }
    cout << endl;

    // 打印下半部分空心三角形(上半部分逆序)
    for (int row = TRIANGLE_ROWS; row >= 1; row--) {
        for (int col = 0; col < WIDTH; col++) {
            if (col == 0 || col == WIDTH - 1 ||
                col == row || col == WIDTH - 1 - row ||
                col == WIDTH / 2) {
                cout << "*";
            } else {
                cout << " ";
            }
        }
        cout << endl;
    }

    // 打印底部边框
    for (int i = 0; i < WIDTH; i++) {
        cout << "*";
    }
    cout << endl;

    return 0;
}

代码说明

  1. 固定宽度与行数:定义WIDTH=17对应图案的总宽度,TRIANGLE_ROWS=8对应单半部分三角形的行数,确保图案与目标一致。
  2. 边框打印:通过循环输出17个星号,实现顶部、中间和底部的实心边框。
  3. 空心三角形逻辑:
    • 左右边缘(col==0和col==WIDTH-1)始终输出星号
    • 每行的斜边位置:col==row和col==WIDTH-1-row,随着行数变化,斜边逐渐向中间靠拢
    • 中间竖线(col==WIDTH/2)始终输出星号,保持图案对称
  4. 下半部分实现:通过逆序遍历行数,直接复用上半部分的星号判断逻辑,实现对称效果。

内容的提问来源于stack exchange,提问作者ريم

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:58:26