B1027 打印沙漏(python)

B1027 打印沙漏(python)_第1张图片
AC
主要是抓住数学关系以及边界情况。

n, sign = input().split()
ls = []
def cal(n):
    '''统计构成一半沙漏的字符个数集'''
    if n < 7: # 如果小于构成沙漏最小的数量7,则直接返回
        return
    num = (n - 1) // 2
    for i in range(3, 1000, 2):
        num -= i
        ls.append(i)
        if num > i + 2: # 判断边界条件,num是否足够组成下一维的沙漏
            continue
        else:
            break
cal(int(n))
left = int(n) - (1 + 2 * sum(ls)) # 计算剩余字符
for i, s in enumerate(ls[::-1]): # 打印上半部分沙漏
    print(i * ' ' + s * sign)
print(len(ls) * ' ' + sign) # 打印中间一个
for i, s in enumerate(ls): # 打印下半部分沙漏
    print((len(ls) - i - 1) * ' ' + s * sign)
print(left) # 打印剩余字符

你可能感兴趣的:(PAT,(Basic,Level),Practice)