GAP
时间限制(普通/Java):3000MS/10000MS 运行内存限制:65536KByte
描述
最近经常下雨,泥泞的道路已经让人不爽,如果不小心踩到水沟(gap)里就相当刺激了。 某位热爱科学的无聊闷骚猥琐男想到了这样一个问题:水沟里有多少水? 为了简化问题,我们只需求出给定的一个纵切面上雨水所占的面积即可。
如图所示,假设在这个纵切面上,水沟的轮廓可以用一条抛物线描述:
水平面位于y=0。换言之,由y=0和两条曲线围成的区域就是雨水所在的区域。
输入
输入包括多组数据。 每组数据仅占一行,包括三个浮点数a, b, c (a>0)。当输入的a小于0时则表示输入结束,你的程序应该到此结束,并且不要处理这组数据。
输出
对于每组数据,输出一行包括所求的面积,四舍五入到小数点后四位。
样例输入
0.5 4.0 6.0
1.0 1.0 1.0
1.0 0.0 -2.5
1.0 2.0 1.0
-1.0 0.0 0.0
样例输出
5.3333
0.0000
5.2705
0.0000
题解:简单的一元二次方程求解问题,若方程=0时无解或一解,即b*b-4*a*c<=0,输出0.0000.
若方程有两解,找到x1,x2,用定积分即可解出。
#include#include #include #include using namespace std;int main(){ double a,b,c,x1,x2,temp; while(~scanf("%lf%lf%lf",&a,&b,&c),a>0) { temp = b*b-4*a*c; if(temp<=0.0) { puts("0.0000"); continue; } x1 = (-b-sqrt(temp))/(2*a); x2 = (-b+sqrt(temp))/(2*a); double ans = a*x2*x2*x2/3+b*x2*x2/2+c*x2; if(x1>0||x2<0) printf("%.4f\n",-ans); else printf("%.4f\n",-2*ans); } return 0;}