编程题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)
菱形的中心点为(2,2),四条边的坐标规律如下:
- 左上斜边,三个坐标点分别为(0,2)、(1,1)、(2,0),
- 右上斜边,三个坐标点分别为(0,2)、(1,3)、(2,4),
- 左下斜边,三个坐标点分别为(2,0)、(3,1)、(4,2),
- 右下斜边,三个坐标点分别为(2,4)、(3,3)、(4,2)。
四个边上的点到中心点的横坐标绝对值 加上纵坐标的绝对值之和都等于2,即abs(i-2)+abs(j-2)==2。
举例:(0,2)这个坐标到中心点(2,2)的横坐标绝对值为abs(0-2)=2,纵坐标绝对值为abs(2-2)=0,两者之和为2,满足条件。其他边上的点同样满足这个规律。
因此我们可以用一个变量mid=(n-1)//2来表示中心点坐标,最终的判断条件为abs(i-mid)+abs(j-mid)==mid,满足条件则打印#,否则打印.。
参考代码
n = int(input())mid = (n - 1) // 2for i in range(n):for j in range(n):# 曼哈顿距离判断,直接覆盖菱形四条边if abs(i - mid) + abs(j - mid) == mid: print('#', end='')else: print('.', end='') print()