题目描述:
使用一张纸和剪刀,你可以切出两个面形成一个圆柱体的方式如下:
水平切纸(平行于较短的一面),以得到两个矩形的部分。
从第一部分开始,切出一个最大半径的圆。圆圈将形成圆柱体的底部。
将第二部分卷起,使其与圆周的周长相等,并将滚动的一端附加到圆圈上。
注意,滚动可能有一些重叠的部分,以获得所需的周长。
考虑到纸张的尺寸,你能计算出可以用上面描述的方法建造的圆筒的最大体积吗?
输入:
输入由几个测试用例组成。
每个测试用例包含两个数字w和h(1≤w≤h≤100),它们表示纸张的宽度和高度。
最后一个测试用例后面是包含两个零的一行。
输出:
对于每个测试用例,打印一条线条,其中包含尽可能大的圆柱体积。将这个数字四舍五入到小数点之后的3位。
样例输入:
10 10
10 50
10 30
0 0
样例输出:
54.247
785.398
412.095
参考解答:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double width = sc.nextDouble();
double length = sc.nextDouble();
while (width != 0 && length != 0) {
System.out.printf("%.3f\n", count(width, length));
width = sc.nextDouble();
length = sc.nextDouble();
}
}
private static double count(double width, double length) {
double radius_1 = length / (2 * (Math.PI + 1));
if (radius_1 * 2 > width) {
radius_1 = width / 2;
}
double volume_1 = Math.PI * Math.pow(radius_1, 2) * width;
double radius_2 = width / (2 * Math.PI);
double volume_2 = Math.PI * Math.pow(radius_2, 2) * (length - 2 * radius_2);
return Math.max(volume_1, volume_2);
}
}