洛谷P5721 【深基4.例6】数字直角三角形python解法

题目描述

给出 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]  #在输出一行数据之后在列表中删去这一段子列表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值