如何用Python实现pi、欧拉数等常数的金字塔表示功能
金字塔表示实现方案
规则明确
- 输入为常数字符串、金字塔行数n
- 共n行从上到下编号,第i层(i=1,2,…,n)包含i个数值,每个数值为常数字符串中连续i个数字的和,依次向后滑动1位取数,常数字符串中的小数点需忽略
核心优化思路
要实现2层循环且无超时,可通过两步预处理避免嵌套求和逻辑:
- 先提取常数字符串中的所有数字转为整数列表,省去循环中反复判断小数点的开销
- 构造前缀和数组,实现任意连续区间和的O(1)计算,无需额外嵌套循环求和
实现代码
# 读取输入 cte = input() verdiep = int(input()) # 预处理1:提取所有数字,忽略小数点 digits = [int(c) for c in cte if c != '.'] # 预处理2:构造前缀和数组,pre_sum[k]表示前k个数字的累加和,pre_sum[0]=0 pre_sum = [0] for num in digits: pre_sum.append(pre_sum[-1] + num) # 两层循环生成金字塔 for i in range(1, verdiep + 1): current_line = [] # 第i层共i个和,起始索引从0到i-1 for j in range(i): # 连续i个数字的和 = 前缀和差值 sum_val = pre_sum[j + i] - pre_sum[j] current_line.append(str(sum_val)) print(' '.join(current_line))
复杂度说明
- 预处理总时间复杂度为O(m),m为常数字符串长度
- 两层循环总迭代次数为n(n+1)/2,每次迭代为O(1)计算,整体时间复杂度为O(m + n²),无超时风险
内容的提问来源于stack exchange,提问作者Monkey D. Ruffy
相关产品推荐
相关产品推荐

