如何使用C++嵌套循环绘制作业要求的多幅复杂图形?
C++ 嵌套循环图形绘制实现思路
所有控制台字符图形都可以拆解为「每行左侧空格计算」+「每行有效字符计算」两个核心逻辑,逐行遍历输出即可,以下是第一、第三个图形的通用实现方案:
第一个图形(空心类对称图形通用思路)
- 先确定图形总行数
n,把图形拆分为上下对称的两部分分别实现 - 逐行输出规则:
- 左侧空格:上半部分第
i行(从0开始计数)的左侧空格数为n/2 - i,下半部分和上半部分对称,倒序遍历即可 - 有效字符:空心图形仅需要在每行的第一个和最后一个有效字符位置输出
*,中间位置全部输出空格,首行和末行仅输出1个*
- 左侧空格:上半部分第
- 核心代码示例:
// 假设n为奇数,取7为例 int n = 7; // 输出上半部分 for(int i = 0; i <= n/2; i++){ // 输出左侧空格 for(int j = 0; j < n/2 - i; j++){ cout << " "; } // 输出星号和中间空心部分 for(int j = 0; j < 2*i + 1; j++){ if(j == 0 || j == 2*i){ cout << "*"; }else{ cout << " "; } } cout << endl; } // 输出下半部分,倒序遍历上半部分的行号即可 for(int i = n/2 - 1; i >= 0; i--){ for(int j = 0; j < n/2 - i; j++){ cout << " "; } for(int j = 0; j < 2*i + 1; j++){ if(j == 0 || j == 2*i){ cout << "*"; }else{ cout << " "; } } cout << endl; }
第三个图形(数字类对称三角通用思路)
如果是数字递增递减类型的三角,或者帕斯卡三角,实现逻辑如下:
- 左侧空格计算规则和上述空心图形完全一致,先输出对应数量的空格
- 数字输出规则:
- 递增递减类三角:第
i行前半部分从1输出到i,后半部分从i-1倒序输出到1 - 帕斯卡三角:可以用二维数组提前存储每一位的数值(当前位数值=上一行相邻两位数值之和),逐行输出即可,也可以直接用组合数公式
C(i,j)计算当前位数值输出
- 递增递减类三角:第
- 核心代码示例(递增递减数字三角):
int n = 5; for(int i = 1; i <= n; i++){ // 输出左侧空格 for(int j = 0; j < n - i; j++){ cout << " "; } // 输出前半部分递增数字 for(int j = 1; j <= i; j++){ cout << j; } // 输出后半部分递减数字 for(int j = i - 1; j >= 1; j--){ cout << j; } cout << endl; }
内容的提问来源于stack exchange,提问作者boraswim
相关产品推荐
相关产品推荐

