B2025 输出字符菱形
B2025 输出字符菱形 超详细图解
题目拆解
我们要打印一个由*组成的倾斜菱形,形状如下:
*
***
*****
***
*
这个菱形有5行,中间一行有5个*,上下对称。接下来我们像搭积木一样,一步步分析如何实现。
图形拆解(像切蛋糕一样)
我们把菱形切成5行,观察每一行的结构:
graph TD
A[第1行] --> B[2空格 + 1个*]
C[第2行] --> D[1空格 + 3个*]
E[第3行] --> F[0空格 + 5个*]
G[第4行] --> H[1空格 + 3个*]
I[第5行] --> J[2空格 + 1个*]
规律发现
-
空格规律:像电梯楼层一样对称
- 行号 | 1 | 2 | 3 | 4 | 5
- 空格数 | 2 | 1 | 0 | 1 | 2
-
星号规律:中间最多,向两边递减
- 行号 | 1 | 2 | 3 | 4 | 5
- 星号数 | 1 | 3 | 5 | 3 | 1
代码魔法(用数学公式表达规律)
关键变量
- 中间行的索引是0(想象行号从-2到2)
- 总行数 = 2×半径 + 1 → 半径=2时总行数=5
魔法公式
- 前导空格数 = |当前行号|(绝对值)
- 星号数 = 5 - 2×空格数
举个🌰:
pie
title 第1行(行号=-2)
"空格数" : 2
"星号数" : 1
代码逐行解析
#include "bits/stdc++.h"
using namespace std;
int main() {
int radius = 2; // 半径=2,控制菱形大小
int total_lines = 2*radius + 1; // 总行数=5
// 从-2循环到2,共5次(对应5行)
for(int row = -radius; row <= radius; ++row) {
int space = abs(row); // 计算前导空格
int stars = total_lines - 2*space; // 计算星号数
// 打印空格和星号
cout << string(space, ' ') // 生成空格字符串
<< string(stars, '*') // 生成星号字符串
<< endl;
}
return 0;
}
动态生成过程(像打印机工作)
gantt
title 菱形打印过程
dateFormat X
axisFormat 行号
section 第1行
生成空格: -2, 0, 2
生成星号: -2, 0, 1
section 第2行
生成空格: -1, 0, 1
生成星号: -1, 0, 3
section 第3行
生成空格: 0, 0, 0
生成星号: 0, 0, 5
section 第4行
生成空格: 1, 0, 1
生成星号: 1, 0, 3
section 第5行
生成空格: 2, 0, 2
生成星号: 2, 0, 1
手把手调试演示
以第1行(row=-2)为例:
space = abs(-2) → 2stars = 5 - 2×2 → 1- 生成:
" " + "*" → " *"
总结口诀
- 菱形对称有规律
- 行号取绝对值
- 空格数 = 绝对值
- 星号数 = 总数减两倍空格
- 循环打印即完成
试着修改radius的值,看看会打印出多大的菱形吧!比如设置radius=3,就能得到更大的7行菱形哦~ ✨

浙公网安备 33010602011771号