一、题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
1.先用1,2,3,…的自然数拼一个足够长的串
2.用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。 比如,当三角形高度是8时:
输入
输入存在多组数据,对于每组数据:
输入一行包含一个正整数n(3<n<300),表示三角形的高度
输出
对于每组测试数据输出用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。
样例输入
5
10
样例输出
二、题目解析
本题难点在于怎么输出等腰三角形右边,但是通过观察可以看见我们需要的数字长度为多少,我们需要的最大的数字一定不会超过这个长度,比如当层数为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)
四、运行结果