接雨水,c/c++

接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入以-1结尾。

示例1:

输入样例:

0 1 0 2 1 0 1 3 2 1 2 1 -1

输出样例:

6

解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)

输入样例:

4 2 0 3 2 5 -1

输出样例:

9

思路:从第一个柱子往后遍历,然后从遍历柱子每一层,(例如:柱子高为4,则有四层 ),然后再加一个循环,往后遍历,如果有大于等于这一层高度的柱子,water就加上下标差-1,然后break。代码还可以优化,只是提供一种思路。

#include<iostream>
using namespace std;
int main()
{
    int a[10000],x,i,j,k,water=0,t;
    while(cin>>x)
    {
        if(x!=-1)
        a[i++]=x;
        else
        break;
    }
    for(j=0;j<i;j++)
    {
        for(t=1;t<=a[j];t++)
        {
            for(k=j+1;k<i;k++)
            {
                if(a[k]>=t)
                {
                    water+=k-j-1;
                    break;
                }
            }
        }
    }
    cout<<water;
    return 0;
}


版权声明:本文为qq_43581907原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。