题目描述
给出 n,请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
输入格式
输入一个正整数 n。
输出格式
输出如题目要求的数字直角三角形。
输入输出样例
输入 #1
5
输出 #1
0102030405 06070809 101112 1314 15
说明/提示
数据保证,1≤n≤13
'''
思路(我太啰嗦了吧。。其实有更好的解法。。):
1.先创建一个整数列表,包含我要的所有数据。首行为n,末行必为1,高也为n,又是连续整数
所以先直接把需要的数字通过公式构建并放到列表中去。
2.设置头部断点器、尾部断点器,断点器怎么设置的,没啥好说的,个人是模拟出来的
把每行要输出的数据从列表中截取出来。
3.判断每行的数据是否<10,来判断是否加0
4.至于换行问题,判断是不是当前行最后一个元素,是则换行,否则无字符
'''
n=int(input())
#(上底+下底)*高/2
list1=list(range(1,(n+1)*n//2+1))
k1=0 #头部断点器
k2=0 #尾部断点器
for i in range(n,0,-1): #规定输入行数,顺便规定每行输出的数据个数
k1=k2 #头部断点器对应上次尾部断点器的位置
k2+=i #通过+i得到
'''
[0,5] [5,9] [9,12] [12,15] 模拟出来的。。。
'''
for j in range(k1,k2):
if(list1[j]<10):
if j==k2-1: #判断是不是当前行最后一个元素
print(f'0{list1[j]}',end="\n") #是则换行
else:
print(f'0{list1[j]}',end="")
else: #否则无字符
if j==k2-1:
print(f'{list1[j]}',end="\n")
else:
print(f'{list1[j]}',end="")
'''
思路(这个感觉比上个稍微好理解一点吧。。。):
1.先创建一个整数列表,包含我要的所有数据。首行为n,末行必为1,高也为n,又是连续整数
所以先直接把需要的数字通过公式构建并放到列表中去。
2.这个的头部断点器不用动,每行数据的个数就是尾部断点器的位置(因为直接del删除了列表的原因)
3.判断每行的数据是否<10,来判断是否加0
4.至于换行问题,判断是不是当前行最后一个元素,是则换行,否则无字符
5.在输出一行数据之后在列表中删去这一段子列表,这时后面的数自动向列表前移
'''
n=int(input())
#(上底+下底)*高/2
list1=list(range(1,(n+1)*n//2+1))
k1=0 #头部断点器
k2=0 #尾部断点器
for i in range(n,0,-1): #规定输入行数,随便规定每行输出的数据个数
k2=i #当前行数据输出个数即为尾部断点器的位置
for j in range(0,i): #一行输出数据的个数
if(list1[j]<10):
print(f'0{list1[j]}',end="") #是则换行
else:
print(f'{list1[j]}',end="")
print()
del list1[k1:k2] #在输出一行数据之后在列表中删去这一段子列表