【Python】接雨水问题

【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公共选修课一年后上手摸索着来的,刚搞完,挺累的,流程图我手画的实在是太丑,我就不放了。

	下面是我的输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值