三分(整数和浮点数模板)
作者:互联网
1.UmBasketella https://vjudge.net/contest/419540#problem/J(浮点数三分)
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi = acos(-1.0);
double s;
const double eps = 1e-6;
double cacl(double x){
double l = (s - pi * x * x) / pi / x;//算pi * r的时候不能是/pi * r
//只能是/pi / r 或者是/(pi * r);
double h = sqrt(l * l - x * x);
double v = pi * x * x * h / 3;
return v;
}
int main(){
while(~scanf("%lf",&s)){//这里没有告诉输入几组的时候,需要在scanf前面加上~,具体原因在后面解释
//或者用cin读入,或者scanf()!= EOF 不然的话会OLE
double mid,rmid,low = 0.0,up = sqrt(s / pi);//这右边界是放缩过得
//去掉了表面积中的侧面积一部分的面积,这样的r会变大,但不会影响什么
while(up - low > eps){//精度
mid = (up + low) / 2;//中值
rmid = (mid + up) / 2;//中值与右边界的右中值
if(cacl(mid) < cacl(rmid)) low = mid;//计算最大值 因为中值小于右中值
//则最大值因位于中值与右边界中,提高下限
else up = rmid;
}
double r = low;
double l = (s - pi * r * r) / pi / r;
double h = sqrt(l * l - r * r);
double v = pi * r * r * h / 3;
printf("%.2f\n%.2f\n%.2f\n",v,h,r);
}
return 0;
}
这道题出现了一个问题,就是OLE,输出超出限制,具体原因在这
标签:rmid,double,浮点数,up,mid,low,pi,模板,三分 来源: https://blog.csdn.net/Yanzu_Wu_Tumi/article/details/113796672