本题目要求你在控制台输出一个由数字组成的等腰三角形。
1. 先用1,2,3,...的自然数拼一个足够长的串
2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是8时:
1
2 1
3 8
4 1
5 7
6 1
7 6
891011121314151
要求:空格一律用"."代替。
输入格式:
一个正整数n(3<n<300),表示三角形的高度
输出格式:
用数字填充的等腰三角形。
输入样例:
5
输出样例:
....1
...2.1
..3...2
.4.....1
567891011
输入样例:
10
输出样例:
.........1
........2.2
.......3...2
......4.....2
.....5.......1
....6.........2
...7...........0
..8.............2
.9...............9
1011121314151617181
解决方案
(1)确定三角形拼接的范围:因为三角形是一个自然数拼接成的串,所以我们先确定不同层数对应到的自然数,观察两个案例(从上到左下到右再到上)可知:5层到13,10层到23(均未到最后一个自然数的最后一个值是因为第一层只有一个自然数)。所以n层则会从1拼接到2n 3。
(2)每一行第一个数字前的空格数:观察题目给出的两个输出案例可以发现每一行第一个数前面的空格数为输出三角形的高(n) - 第几层。
(3)每一行的第一个数刚好和层数相等。
(4)第2到第n层两个数之间的空格数:从第二层开始所以有i-2,每一层增加两个即(i-2)* 2,又因起始数量为1,所以规律是(i-2)* 2 – 1。
(5)第2到第n层第二个数的确定:因为从上到下的第二个数字是拼接的串的逆序且第一层只有一个数字,所以第n层的第二个数字为拼接串的倒数第n个数字。
(6)最后一层即为拼接串的第n个数到倒数第n个数。
解决代码
n = int(input())lis1 = "".join(str(i) for i in range(1, 2 * n 4))print("." * (n - 1) lis1[0]) # 第一层for i in range(2, n): # 第2到n-1层 print("." * (n - i) lis1[i-1] "." * ((i - 2) * 2 1) lis1[-i])print(lis1[n - 1: -n 1]) # 最后一层 |
---|
运行实例
结语
本题的关键在于寻找三角形中存在的多个规律。
主编:欧洋
稿件来源:深度学习与文旅应用实验室(DLETA)