题目 1111: Cylinder
时间限制: 1Sec 内存限制: 128MB 提交: 1567 解决: 607
题目描述使用一张纸和剪刀,您可以剪出两个面,以以下方式形成一个圆柱体:
水平切割纸张(平行于较短的一侧),以获得两个矩形部分。
从第一部分开始,切出最大半径的圆
圈。圆圈将形成圆柱体的底部。
将第二部分向上滚动,使其周长与圆周相等,并将卷的一端连接到圆圈
上。请注意,卷可能有一些重叠的部分,以获得所需的周长。
鉴于纸张的尺寸,您能否计算出使用上述程序可以构造的圆柱体的最大体
积?输入输入由几个测试案例组成。每个测试案例由两个w和h(1≤w ≤h≤100)组成,表示纸张的宽度和高度。
最后一个测试案例后面是包含两个零的
行。输出对于每个测试案例,打印一条线,其中可能的最大音量为气缸。将此数字在小数点后循环到 3 位。
样例输入<span style="color:#333333"><span style="color:#333333">10 10 10 50 10 30 0 0 </span></span>
样例输出<span style="color:#333333"><span style="color:#333333">54.247 785.398 412.095</span></span>
思路:
没啥思路(直白),就是个数学题,画画图分情况讨论吧。
可以参考这个大佬的解释:https://blog.dotcpp.com/a/2608
实现代码:
#include <stdio.h>
#define PI 3.1415926535897932
int main()
{
double w,h,r,r1,r2;/*r1:结果1,r2:结果2*/
while(scanf("%lf%lf",&w,&h))
{
if(w==0&&h==0)
break;
r=h/(2*PI+2);/*以h-2r为周长时,w为圆柱的高*/
if(r*2>w)
{
r=w/2;
}
r1=PI*r*r*w;
r=w/(2*PI);/*以w为圆柱的周长*/
r2=PI*r*r*(h-2*r);
/*输出结果*/
printf("%.3lf\n",(r1>r2)?r1:r2);
}
return 0;
}