Python 蓝桥杯 等腰三角形

一、题目描述

本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:

1.先用1,2,3,…的自然数拼一个足够长的串

2.用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。 比如,当三角形高度是8时:20210320231954684.png (132×138)

 输入
输入存在多组数据,对于每组数据:
输入一行包含一个正整数n(3<n<300),表示三角形的高度

输出
对于每组测试数据输出用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。

样例输入
5
10

样例输出

20210320232316333.png (186×345)

二、题目解析

本题难点在于怎么输出等腰三角形右边,但是通过观察可以看见我们需要的数字长度为多少,我们需要的最大的数字一定不会超过这个长度,比如当层数为5时,需要16个数字的长度,但是最大我们只需要数字13,并且只用到了13的十位数。只取字符串前面一定长度的字符很容易通过切片实现。

我们的程序大概需要实现两个功能,第一个是产生字符串。第二个是输出图形。都用到了切片的相关知识,不明白的可以搜搜看。

三、代码

l=list(map(int,input().split()))

#当高度为8时,需要的字符串长度为8+14+6
#即当高度为n时,需要的字符串长度为2+n-1+n-1+n-2+n-2=4n-4
#1-9有9位,10-99有178位,100-999有2697位,所以最多用到3位数
#当n=5时,需要长度为16,16-9=7,需要1-13这个13个数
#函数生成字符串
       
def productStr(n):
    s=''
    long = 4*n-4
    for i in range(long):
        s+=str(i)
##    if long<=9:
##        for i in range(1,long):
##            s+=str(i)
##    elif 9<long<187:#最多也只是两位数
##        for i in range(1,9+(long-9)//2+2):
##            s+=str(i)
##    else:
##        for i in range(1,9+89+(long-9-178)//3+2):
##            s+=str(i)
    return s

#函数显示三角形
def show(n,S):
    s=S[0:4*n-4]
    for i in range(n):
        if i==0:
            print('.'*(n-1)+'1')
        elif i==n-1:
            print(s[n-1:3*n-2])
        else:
            s1='.'*(n+i)
            s1=s1[:n-i-1]+s[i]+s1[n-i:n-1+i]+s[-i]
            print(s1)

for i in range(len(l)):
    s=productStr(l[i])
    show(l[i],s)

 四、运行结果

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值