B4412 [GESP202509 二级] 菱形
欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。
:::align{center} :::
要解决这类问题,关键在于找出决定一个位置是打印 # 还是 . 的内在规律。我们可以把这个
由于题目给定的 # 点与这个中心点
我们可以计算任意一点 abs(i - mid) + abs(j - mid),其中 abs 表示取绝对值。
:::info[考点提示] abs 函数是明确在 GESP 二级大纲中写出的考点哦。
abs(x) 的意思是,如果 abs(x) 写作 $ |
x | $。 |
|---|
通过对样例的观察和计算,我们可以发现一个非常优美的规律:所有构成菱形边界的 # 点,它们到中心点的曼哈顿距离都恰好等于 # 在 # 在 # 点都满足这个条件。
找到了这个规律后,程序就变得非常简单了。我们只需要用两层嵌套的循环来遍历从 #;如果不等,就输出 .。每当内层循环(即一行)结束时,我们输出一个换行符,这样就能绘制出完整的菱形了。
参考代码:
for (________) {
for (________) { // 二重循环,遍历 (1, 1) 到 (n, n) 的每一个坐标点
if (________) // 计算到中心点的曼哈顿距离是否符合条件
cout << '#';
else
cout << '.';
}
________;
}