永康建设局网站,用html做网站搜索框,咸阳网站网站建设,城乡建设网站题目描述
使用一张纸和剪刀#xff0c;您可以通过以下方式切出两个面形成一个圆柱体#xff1a; 水平切割纸张#xff08;平行于较短的边#xff09;以获得两个矩形部分。 从第一部分开始#xff0c;切出一个最大半径的圆。圆圈将形成圆柱体的底部。 将第二部分向上滚动您可以通过以下方式切出两个面形成一个圆柱体 水平切割纸张平行于较短的边以获得两个矩形部分。 从第一部分开始切出一个最大半径的圆。圆圈将形成圆柱体的底部。 将第二部分向上滚动使其周长与圆的周长相等并将滚动的一端连接到圆上。请注意卷筒可能有一些重叠的部分以获得所需的周长长度。 给定纸张的尺寸您能否计算出可以使用上述程序构建的圆柱体的最大可能体积
输入格式
输入由多个测试用例组成。每个测试用例由两个数字 w 和 h 1 ≤ w ≤ h ≤ 100组成它们表示纸张的宽度和高度。 最后一个测试用例后跟一行包含两个零。
输出格式
对于每个测试用例打印一行具有最大可能体积的圆柱体。将此数字四舍五入到小数点后 3 位。
样例输入
10 10
10 50
10 30
0 0
样例输出
54.247
785.398
412.095
解题思路
根据题意可得对纸张的裁剪如下图所示
注只是帮助理解图不一定正确第一部分裁剪圆第二部分向上卷将一端与圆拼接 刚开始可能会像第一部分划为正方形利用率最高
但是这样的话:2r2Πr,才能实现拼接但是2r2Πr显然不成立所以这样的想法是不正确的 不能投机取巧只能从公式入手
V圆柱体 Π 从公式可以看出要使r与h尽量大r受到宽度的影响所以先考虑h要使h尽量大那么只有 容易得到 取最大
V(圆柱体)
以上是w作圆周长的情况不能忽略h-2r作圆周长的情况即 取最大
V(圆柱体)
到这里代码可写为
#includestdio.h
#includemath.h#define PI acos(-1)//定义PI为3.1415926535898
int main()
{double w,h;while(scanf(%lf %lf,w,h) w!0 h!0){double volumeone,volumetwo;double ronew/(2*PI);volumeonePI*pow(rone,2)*(h-2*rone);double rtwoh/(2*PI2);volumetwoPI*pow(rtwo,2)*w;printf(%.3lf\n,volumeonevolumetwo?volumeone:volumetwo);}return 0;
}
但是可以看到运行结果是错误的因为上述r都是由周长限制的即
volumetwo;但是也要同时满足2rw,如果2rw,那么rw/2
可以这么理解按照我们的图来讲
第一限制条件2rw
第二限制条件
不满足第一限制条件只考虑第二限制条件就会引起判断错误 而volomeone本来就满足2rw所以不需要写判断
所以volumetwo要加入判断 double rtwoh/(2*PI2)w/2 ? w/2 : h/(2*PI2); 最终代码为
#includestdio.h
#includemath.h#define PI acos(-1)//定义PI为3.1415926535898
int main()
{double w,h;while(scanf(%lf %lf,w,h) w!0 h!0){double volumeone,volumetwo;double ronew/(2*PI);volumeonePI*pow(rone,2)*(h-2*rone);double rtwoh/(2*PI2)w/2 ? w/2 : h/(2*PI2);volumetwoPI*pow(rtwo,2)*w;printf(%.3lf\n,volumeonevolumetwo?volumeone:volumetwo);}return 0;
}