POJ-3737 UmBasketella题解及体会
2017-02-08 22:26
525 查看
#include
<iostream>
#include<iomanip>
#include
<cstdio>
#include
<cmath>
using namespace
std;
#define eps 1e-8
const double pi=acos(-1.0);
double S;
double
cal(double x){
return(1.0/3.0)*x*sqrt(S*(S-(2*pi*x*x)));
}
int
main(){
while(cin>>S)
{
double left=0.1,right=sqrt(S/2.0/pi);
while(right-left>eps)
{
double middle=(left+right)/2;
double middleright=(middle+right)/2;
if(cal(middle)>cal(middleright))
right=middleright;
else
left=middle;
}
cout<<setprecision(2)<<fixed<<cal(left)<<endl;
cout<<setprecision(2)<<fixed<<sqrt(S*(S-2*pi*left*left))/pi/left<<endl;
cout<<setprecision(2)<<fixed<<left<<endl;
}
return 0;
}
本题的解题方向在于得出圆锥表面积和体积的关系,得到R的上限,并借此通过二分法求得使圆锥体积最大的半径,进而得解,输出时要注意格式。
<iostream>
#include<iomanip>
#include
<cstdio>
#include
<cmath>
using namespace
std;
#define eps 1e-8
const double pi=acos(-1.0);
double S;
double
cal(double x){
return(1.0/3.0)*x*sqrt(S*(S-(2*pi*x*x)));
}
int
main(){
while(cin>>S)
{
double left=0.1,right=sqrt(S/2.0/pi);
while(right-left>eps)
{
double middle=(left+right)/2;
double middleright=(middle+right)/2;
if(cal(middle)>cal(middleright))
right=middleright;
else
left=middle;
}
cout<<setprecision(2)<<fixed<<cal(left)<<endl;
cout<<setprecision(2)<<fixed<<sqrt(S*(S-2*pi*left*left))/pi/left<<endl;
cout<<setprecision(2)<<fixed<<left<<endl;
}
return 0;
}
本题的解题方向在于得出圆锥表面积和体积的关系,得到R的上限,并借此通过二分法求得使圆锥体积最大的半径,进而得解,输出时要注意格式。
相关文章推荐
- poj 3737 UmBasketella (三分)
- POJ 3737 UmBasketella 三分或公式
- POJ 3737 UmBasketella(三分)
- poj 3737 UmBasketella(三分+求导)
- POJ 3737 UmBasketella 三分法 入门题
- poj 3737 UmBasketella 三分
- poj 3737 UmBasketella(三分)
- POJ 3737 UmBasketella(三分模板)
- POJ 3737 UmBasketella (三分算法)
- POJ 3737(UmBasketella)
- poj3737 UmBasketella(三分)
- POJ 3737 UmBasketella
- POJ 3737 UmBasketella 三分搜索
- POJ 3737 UmBasketella
- poj 3737 UmBasketella(数学推导||三分)
- POJ - 3737 - UmBasketella(三分)
- poj 3737 UmBasketella
- day5 POJ 3737 UmBasketella
- (POJ - 3737)UmBasketella
- POJ 3737 UmBasketella 三分法 入门题