解题思路:
QQ截图20171015111216.jpg

注意事项:
一定要注意,用户输出的不一定是整数,有可能是小数,所以w和h要用double型,

如果用int型提交了之后会是答案错误。

参考代码:

#include <stdio.h>
#define PI 3.141592653589793238

int main()
{
    double w, h, r, result1, result2;
    while(scanf("%lf%lf", &w, &h) == 2 && w != 0)
    {
        r = w / (2 * PI);//第一种情况
        result1 = PI * r * r * (h - 2 * r);
        r = h / (2 * PI + 2);
        r = r * 2 > w ? w / 2 : r;//第二种情况
        result2 = PI * r * r * w;
        printf("%.3f\n", result1>result2 ? result1:result2);
    }//输出两种情况算出来的最大者即可
    return 0;
}


点赞(8)
 

0.0分

18 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 22 条评论

斯宾塞 4年前 回复TA
scanf("%lf%lf", &w, &h) == 2  有人能告诉我这个代码是意思吗?主要是等于2不懂
寒露 4年前 回复TA
这个还要考虑r,最后算出来的直径2*r可能大于w,所以应该比较2*r与w
阿亚拉撒 5年前 回复TA
@影随风 直径不可大于w
影随风 5年前 回复TA
为什么我第二个测试数据是1114,别的都对
影随风 5年前 回复TA
@sususu352 是2h/3处,但是很明显取不到。
杨柳缘 5年前 回复TA
#include<stdio.h>
#define PI 3.141592653589793238
int main()
{
    double h,w,result1,result2,r1,r2;
    while(scanf("%lf%lf", &h, &w)==2&&h!=0){
    	        //第一种情况,h固定为圆柱的高,r根据w切割而得 ,但是r的大小可能不合理
    	        r1=h/2;
    	        if(2*PI*r1>w-h){
    		        r1=w/(2*PI+2);//w=2*Pi*r+2*r=r*(Pi*2+2) 
	        }
    	        result1=PI*r1*r1*h;
    	
    	        // 第二种情况, w-2*r 固定为圆柱的高,约定h比w小,所有没有不合理的情况 
	        r2=h/(2*PI);
		result2=PI*r2*r2*(w-2*r2);
		printf("%.3lf\n",result1>result2?result1:result2);
	}
    return 0;
}
低调 5年前 回复TA
为什么一直通不过啊,一直是错误50%,都一模一样的,就只差变量名不同了
可是我不会a 5年前 回复TA
表示看不懂这个英语
almumujin 5年前 回复TA
错误50%。。。
sususu352 5年前 回复TA
第二种情况中,体积公式打开之后V=-2*pi*r^3+pi*h*r^2,根据增减性,在h/3处体积取最大值,要不要比较一下h/3和w/2*pi的大小