编程题2:菱形
3.2.1 题目描述
小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 n 行 n 列的字符画,n 是一个大于3的奇数。菱形的四个顶点依次位于第1行、第n列、第n行、第n列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 . 。
给定 n,请你帮小 A 绘制对应的菱形。
3.2.2 输入格式
一行,一个正整数n。
3.2.3 输出格式
输出共 n 行,表示对应的菱形。
3.2.4 样例
3.2.4.1 输入样例 1
3
3.2.4.2 输出样例 1
.#.
#.#
.#.
3.2.4.3 输入样例 2
9
3.2.4.4 输出样例 2
....#....
...#.#...
..#...#..
.#.....#.
#.......#
.#.....#.
..#...#..
...#.#...
....#....
3.2.5 数据范围
对于所有测试点,保证 3 ≤n ≤29 并且为奇数。
核心考点
二维图形打印、双重循环、坐标规律判断
解题思路与代码解析
1. 题目理解
输入一个奇数n,输出一个n行n列的字符图,形成一个菱形。
2. 程序功能点识别
功能点1:双重循环控制行列输出
- 内循环逐一打印每行的字符,判断是否为
#或.,根据坐标规律输出对应字符。 内循环结束后换行。
功能点2:判断坐标规律,确定#的判断逻辑
首先我们看 n=5的菱形对应的坐标:
(0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
(3,0) (3,1) (3,2) (3,3) (3,4)
(4,0) (4,1) (4,2) (4,3) (4,4)
观察四条边的坐标规律:
- 左上斜边,三个坐标点分别为(0,2)、(1,1)、(2,0),满足
i+j=2; - 右上斜边,三个坐标点分别为(0,2)、(1,3)、(2,4),满足
j-i=2; - 左下斜边,三个坐标点分别为(2,0)、(3,1)、(4,2),满足
i-j=2; - 右下斜边,三个坐标点分别为(2,4)、(3,3)、(4,2),满足
i+j=6。
菱形的中点值为5//2=2,四条边的坐标规律可以用一个变量mid=(n-1)//2来表示,最终的判断条件为:
参考代码
# 菱形字符图绘制,n为奇数
n = int(input())
mid = (n - 1) // 2# 菱形中心坐标
# 外层循环控制行,内层循环控制列
for i in range(n):
for j in range(n):
# 判断是否在菱形的四条边上
if j + i == mid:
print('#', end='')
elif j - i == mid:
print('#', end='')
elif i - j == mid:
print('#', end='')
elif i + j == 3 * mid:
print('#', end='')
else:
print('.', end='')
# 每行结束后换行
print()