如何用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; }
代码说明
- 固定宽度与行数:定义
WIDTH=17对应图案的总宽度,TRIANGLE_ROWS=8对应单半部分三角形的行数,确保图案与目标一致。 - 边框打印:通过循环输出17个星号,实现顶部、中间和底部的实心边框。
- 空心三角形逻辑:
- 左右边缘(
col==0和col==WIDTH-1)始终输出星号 - 每行的斜边位置:
col==row和col==WIDTH-1-row,随着行数变化,斜边逐渐向中间靠拢 - 中间竖线(
col==WIDTH/2)始终输出星号,保持图案对称
- 左右边缘(
- 下半部分实现:通过逆序遍历行数,直接复用上半部分的星号判断逻辑,实现对称效果。
内容的提问来源于stack exchange,提问作者ريم
相关产品推荐
相关产品推荐

