题目背景
在图形类算法题中,字符画绘制是考察逻辑控制与坐标计算的常见题型。本题要求根据给定的奇数 n,输出一个 n×n 的菱形图案。
题目描述
需要绘制的菱形是一个 n 行 n 列的字符画,n 是一个大于 1 的奇数。菱形的四个顶点依次位于第 1 行、第 1 列、第 n 行、第 n 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .。
例如,一个 5 行 5 列的菱形字符画是这样的:
..#..
.#.#.
#...#
.#.#.
..#..
给定 n,请你帮小 A 绘制对应的菱形。
输入输出格式
输入格式 一行,一个正整数 n。
输出格式 输出共 n 行,表示对应的菱形。
样例 1 输入:
3
输出:
.#.
#.#
.#.
样例 2 输入:
9
输出:
....#....
...#.#...
..#...#..
.#.....#.
#.......#
.#.....#.
..#...#..
...#.#...
....#....
数据范围 对于所有测试点,保证 3 ≤ n ≤ 293 并且 n 为奇数。
解题思路
这道题的核心在于确定哪些坐标 (i, j) 应该被填充为 #。我们可以从数学规律和数组模拟两个角度切入。
方法一:数学规律判断
观察菱形的几何特征,它由四条直线段组成。如果我们以左上角为原点建立坐标系(行号 i,列号 j),可以发现:
- 左上到右下的斜线:行号和列号的差值固定。
- 右上到左下的斜线:行号和列号的和固定。
设中心点坐标为 (m, m),其中 m = n / 2 + 1。四条边的方程可以推导如下:
- 上顶点到左顶点:
i + j == m + 1 - 上顶点到右顶点:
j - i == m - 1(即i - j == -(m - 1)) - 下顶点到左顶点:
i - j == m - 1 - 下顶点到右顶点:
i + j == m * 3 - 1
只要满足上述任意一个条件,该位置就打印 ,否则打印 。这种方法空间复杂度低,直接计算即可。

