接雨水
给定 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版权协议,转载请附上原文出处链接和本声明。