A128501.装饰花园
题目描述
Sherry 正在改造花园,她希望在花园中有计划地种植两种不同的植物,这样等植物都长成后,就能够得到一个想要的图案。
花园可以视为一个 n × n 的二维网格,其中网格的每个位置需要种植一种植物,用 * 和 # 来表示可以选择的两种植物。Sherry 计划在边界和两条对角线上种植 * 表示的植物,在其他位置种植 # 表示的植物。
Sherry 希望你能帮她画图符合她要求的花园示意图,让她提前看看效果如何。
输入格式
输入一个奇数 n,表示花园的大小为 n × n。
输出格式
输出 n 行,每行 n 个字符,表示花园对应位置的种植情况。
数据范围
* 1 ≤ n ≤ 100
* 数据保证 n 是奇数。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
核心思路
* 对于一个 n × n 的网格,位置用 (i, j) 表示(0 ≤ i, j < n)。
* 需要输出 * 的位置有以下四类:
1. 上边界:i == 0
2. 下边界:i == n - 1
3. 左边界:j == 0
4. 右边界:j == n - 1
5. 主对角线:i == j
6. 副对角线:i + j == n - 1
* 只要满足以上任意一个条件,该位置就输出 *,否则输出 #。
* 直接遍历所有位置,逐行逐列判断即可,时间复杂度 O(n²),完全满足 n ≤ 100 的数据范围。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码实现(ALL AC,可放心食用)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码详解
1. 输入
* 读入一个奇数 n,表示网格大小。
2. 双重循环遍历网格
* 外层循环控制行 i,内层循环控制列 j。
* 每输出完一行后,换行。
3. 判断当前位置
* i == 0:第一行(上边界)
* i == n - 1:最后一行(下边界)
* j == 0:第一列(左边界)
* j == n - 1:最后一列(右边界)
* i == j:主对角线
* i + j == n - 1:副对角线
只要满足以上任意一个条件,就输出 *,否则输出 #。
4. 输出
* 每行结束后换行,保证输出格式正确。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
示例分析
示例 1
输入:
输出:
手动验证(以第 3 行 i = 2 为例):
* j = 0:左边界 → *
* j = 1:i == j?否;i + j == 4?2 + 1 = 3 ≠ 4 → #
* j = 2:i == j 成立 → *
* j = 3:i + j == 4?2 + 3 = 5 ≠ 4 → #
* j = 4:右边界 → *
得到 *#*#*,与输出一致。
示例 2
输入:
输出:
同样满足边界 + 两条对角线的规则。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
复杂度分析
* 时间复杂度:O(n²),遍历整个网格。
* 空间复杂度:O(1),仅使用常数个变量。