【python】接雨水问题:
给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水?
# 接雨水:给定n个非负整数表示每个宽度为1的柱子的高度图,
# 计算按此排列的柱子下雨之后能接多少雨水
water = 0
m,n = 0,0
p = 0
q = 1
location = [] # 定义一个空列表,表示某元素的索引
str1=input("请输入英文,间隔的柱子数组[···, ···, ····]:\n")
list1 = str1.split(",")
for i in range(len(list1)):
list1[i] = int(list1[i])
print("输入结果:{}".format(list1))
print("最高层数:{}".format(max(list1))) # 输出最大值
def list_index():
for j in range(len(list1)):
if list1[j] == max(list1):
location.append(j)
print("当前最高柱子位置{}".format(location)) # 以列表的形式打印索引,由于题目没有限制,大家可以根据题目要求将索引格式化输出即可
def list_change():
a = max(list1)
while a in list1:
global q
while q in range(len(location)):
list1[int(location[p])] = int(max(list1))-1
p = p+1
q = q+1
else:
print("循环正常结束")
print("减一层高度后{}".format(list1))
while max(list1) != 1:
list_index()
if len(location) == 1:
list_change()
continue
else:
while i in range(len(location)-1):
temp=location[-1-m]-location[-2-m]-1
water += temp
m = m+1
print("第{}次,该次接水{},总共{}".format(m,temp,water))
else:
print("循环正常结束")
print("第{}层的接雨水数为{}".format(max(list1),water))
list_change()
continue
print("柱子数组为{}共接雨水{}".format(str1,water))
自己写的,可能很笨拙,是python公共选修课一年后上手摸索着来的,刚搞完,挺累的,流程图我手画的实在是太丑,我就不放了。
下面是我的输出结果