蓝桥杯 1111: Cylinder

题目链接
我的代码:

#include <cstdio>
#include <cmath>
#define max(a,b) a>b?a:b
double w,h;
const double pi=3.141592653589793;
double getVolume(){
	double v=0.0,vans=0.0;
	if((pi+1)*w<=h){
		v=0.25*pi*pow(w,3);
		vans=max(vans,v);
	}else{
		v=0.25*pi*w*pow(h,2)/pow(pi+1,2);
		vans=max(vans,v);
	}
	if(2*pi*h<=3*w){
		v=1.0*pi*pow(h,3)/27;
		vans=max(vans,v);
	}else{
		v=0.25*pow(w,2)*(h*pi-w)/pow(pi,2);
		vans=max(vans,v);
	}
	return vans;
}
int main(){
	while(scanf("%lf%lf",&w,&h)&&(w||h)){
		printf("%.3lf\n",getVolume());
	}
	return 0;
}

同时还看到了一份十分简洁的代码

#include <stdio.h>
#define PAI 3.1415926535898
void main()
{
    double w,h,radii,volume1,volume2;
 
    while (scanf("%lf%lf",&w,&h)&&w!=0&&h!=0)
    {
        radii=h/2/(1+PAI);
        if (2*radii>w)
            radii=w/2;
        volume1=PAI*radii*radii*w;
        radii=w/2/PAI;
        volume2=PAI*radii*radii*(h-2*radii);
        printf("%.3lf\n",(volume1>volume2)?volume1:volume2);
    }
}
posted @ 2022-02-06 01:26  Ryomk  阅读(43)  评论(0编辑  收藏  举报