Cylinder-Java

题目描述:

使用一张纸和剪刀,你可以切出两个面形成一个圆柱体的方式如下:
	水平切纸(平行于较短的一面),以得到两个矩形的部分。
	从第一部分开始,切出一个最大半径的圆。圆圈将形成圆柱体的底部。
	将第二部分卷起,使其与圆周的周长相等,并将滚动的一端附加到圆圈上。
	注意,滚动可能有一些重叠的部分,以获得所需的周长。
	考虑到纸张的尺寸,你能计算出可以用上面描述的方法建造的圆筒的最大体积吗?

输入:

输入由几个测试用例组成。
每个测试用例包含两个数字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);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值