✏️ 纠错
第 143 题 / 共 155 题

题目描述

小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 n 行 n 列的字符画,n 是一个大于 1 的奇数。菱形的四个顶点依次位于第 1 行、第 1 列、第 n 行、第 n 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .

例如,一个 5 行 5 列的菱形字符画是这样的:

..#..
.#.#.
#...#
.#.#.
..#..

给定 n,请你帮小 A 绘制对应的菱形。

输入格式

一行,一个正整数 n。

输出格式

输出共 n 行,表示对应的菱形。

输入输出样例

输入 #1

3

输出 #1

.#.
#.#
.#.

输入 #2

9

输出 #2

....#....
...#.#...
..#...#..
.#.....#.
#.......#
.#.....#.
..#...#..
...#.#...
....#....

说明/提示

对于所有测试点,保证 3≤n≤29 并且 n 为奇数。

📝 题目解析
【考察内容】输出图形
【解析】此题考察循环控制与坐标变换的结合运用。通过设定中心点k,利用二维遍历中每个位置(i,j)到中心的曼哈顿距离是否等于k来决定输出‘#’或‘.’,从而构造出菱形轮廓。同时,考生也可使用模拟画图的方式构建代码,时间复杂度不变,同样可以通过题目,代码的复杂程度会稍高,适合考试中未找到中心点思路的考生。

#include <algorithm>
#include <cstdio>

using namespace std;

int main() {
    int n, i, j, k;
    scanf("%d", &n);
    k = n / 2;
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            if (abs(j - i) + abs(k - j + 1) == k)
                printf("#");
            else
                printf(".");
        }
        printf("\n");
    }
    return 0;
}