肖黄清


私信TA

用户名:uq_24402228243

访问量:3151

签 名:

等  级
排  名 5263
经  验 1500
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

屏幕截图 2022-04-06 213445.png

图片引用自kevin的文章

根据上图得出的公式求解。

注意事项:

1.需要自定义 PI的值,或使用acos(-1) 来求(会增加 时间和空间 的占用)。PI 可通过 printf("%.15f", acos(-1)) 来查看(若 记不住 的话);
2.此题涉及的变量 均是double,若设置为float 会因为 精度不够 而出错 ;
3.min :对上图中第一种情况的越界判断 ,若 r 取 公式计算出的值 与 w/2 之间的最小值 (即 r若超过 w/2 ,则赋值为 w/2);
4.max :取2种情况下 , 最大的值(biggest possible volume );
5.注意 最后的输出格式 : %.3lf\n

参考代码:

//#include<bits/stdc++.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define PI 3.14159265359 
double h, w, r, v1, v2;
int main() {
    while(scanf("%lf %lf", &w, &h) && w && h){
    	r = min(h / (2 + 2 * PI), w / 2);
    	v1 = PI * r * r * w;
    	r = w / (2 * PI);
    	v2 = PI * r * r * (h - 2 * r);
    	printf("%.3lf\n", max(v1, v2));
    }
    return 0;
}


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区