原题链接:Cylinder
解题思路:
注意事项:
参考代码:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
/*
* 使用一张纸和一把剪刀,你可以用以下方式剪下两个面来形成一个圆柱体:
水平切割纸张(平行于短边),得到两个矩形部分。
从第一部分开始,切出一个最大半径的圆。圆圈将形成圆柱体的底部。
卷起第二部分,使其周长与圆的周长相等,并将卷的一端连接到圆上。请注意,卷可能有一些重叠部分,以便获得所需的周长。
给定纸张的尺寸,你能计算出一个圆柱体的最大可能体积吗?这个圆柱体可以用上面描述的程序来构造。
输入
输入由几个测试用例组成。每个测试用例由两个数字w和h组成( 1 ≤ w ≤ h ≤ 100 ),表示纸张的宽度和高度。
最后一个测试用例后面跟着一行包含两个零的代码。
输出
对于每个测试案例,用最大可能体积的圆柱体打印一行。将这个数字四舍五入到小数点后3位。
* */
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
double w = scanner.nextDouble();//宽
double h = scanner.nextDouble();//高
if ( w==0 || h==0)
break;
if (w > h) {//如果宽大于高,则交换两者的值
double temp;
temp = w;
w = h;
h = temp;
}
// DecimalFormat df = new DecimalFormat("##.000");//将结果保留三位小数
double result01 = situation01(w, h);
double result02 = situation02(w, h);
if (result01 >= result02) {
System.out.println(String.format("%.3f", result01));//保留三位小数的第二种方法
} else {
System.out.println(String.format("%.3f", result02));
}
}
}
public static double situation01(double w, double h) {//情况1,需要判断r*2和w的大小
double v = 0;
double r = h / (2 * (Math.PI + 1));
r = r*2>w?w/2:r;
v = Math.PI * (Math.pow(r, 2)) * w;
return v;
}
public static double situation02(double w, double h) {//情况2
double v = 0;
double r = w / (2 * Math.PI);
v = Math.PI * Math.pow(r, 2) * (h - 2 * r);
return v;
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复