对称绘图类解题思路
对称沙漏图案绘制
一、题目理解
输入一个奇数 n,要求输出 n 行对称的沙漏图案:
* 图案整体上下对称,星号(*)在每行居中显示;
* 星号数量规律:以中间一行为中心,向上下两侧依次递增(如 n=5 时,星号数为 5→3→1→3→5);
* 每行左侧用空格填充,保证星号居中。
二、解题思路
核心是利用「行号到中间行的距离」统一计算每行的空格数和星号数,无需拆分上下部分,逻辑简洁且通用:
1. 确定中间行:中间行行号 k = n/2 + 1(如 n=5 时,中间行是第3行);
2. 计算距离:对任意一行 i,计算其到中间行的距离 d = abs(k - i);
3. 推导星号数:星号数 star = 2*d + 1(距离越远,星号越多,天然实现对称);
4. 推导空格数:左侧空格数 space = (n - star)/2(保证星号在每行居中)。
三、代码逐行解释
四、核心总结
1. 核心公式:
* 中间行:k = n/2 + 1;
* 距离:d = abs(k - i);
* 星号数:star = 2*d + 1;
* 空格数:space = (n - star)/2;
2. 优势:仅用一个循环即可完成所有行的绘制,无需拆分上下部分,逻辑简洁且适配所有奇数 n;
3. 通用性:修改星号/空格的计算逻辑,可快速适配三角形、菱形等其他对称图形。