LuoguB2029 大象喝水 题解
Update
- \(\texttt{2021.12.4}\) 修改了原先的错误代码,给各位造成影响,在此表示很抱歉。
Content
大象要喝 \(20\) 升水,但现在只有一个深 \(h\) 厘米,半径 \(r\) 厘米的桶。求大象至少要喝多少桶水。
数据范围:未知。
Solution
我们发现,这个桶其实就是一个圆柱体。那么我们回想一下,圆柱体的体积怎么算?
和其他柱体一样,圆柱也可以用 \(V=Sh\) 这个公式来算,又因为圆的面积 \(S=\pi r^2\),因此,圆柱的体积就可以表示为 \(V=\pi r^2h\)。
那么在 C++ 中怎么表示呢?
有些同学可能知道,\(\pi\) 在 C++ 中可以用 acos(-1.0)
来表示,但是这超出了“入门”的范围。对于初学者,我们只需要取 \(\pi\) 的约值就好了,注意建议保留 \(7\) 位小数及以上,即 \(3.1415926\dots\)。
那么回到这道题,大象要喝 \(20\) 升 = \(2\times 10^4\text{ ml}\) 水,所以我们不妨设要喝的桶数为 \(x\),则由题可以得到:
\]
但是我们发现,\(x\) 绝大部分情况下不是整数,这可怎么办呢?这里如果向下取整的话又会导致最终大象喝的水 \(<20000\text{ ml}\),那么再喝一桶不是满的水不就好了吗?这相当于数学中的向上取整,表示为 \(\left\lceil x\right\rceil\),在 C++ 中的函数为 ceil()
,需要调用 cmath
库。因此,我们可以得到最终的答案为 \(\left\lceil\dfrac{20000}{\pi r^2h}\right\rceil\),注意为了提高精度,需要将 \(20000\) 或者 \(\pi r^2h\) 变为一个浮点型变量。
Code
以下为笔者 18 年在 Openjudge 上面做这道题目时的代码。
#include <bits/stdc++.h>
using namespace std;
const double Pi=3.14159;
int main() {
int r,h,v,ans;
cin>>h>>r;
v=Pi*r*r*h;
if(20000%(int)v!=0)
ans=20000/(int)v+1;
else
ans=20000/(int)v;
cout<<ans;
return 0;
}
最新文章
- 搜索引擎关键词劫持之.net篇
- 【bzoj2006】 NOI2010—超级钢琴
- c++用双向链表实现模板栈
- python基础07 函数
- .Net core环境准备
- Nginx入门笔记之————配置文件结构
- 用C#操作vss、msbuild、reactor
- map 转换 xml ; xml转map
- WinScp上传和下载
- Java study 1:The note of studying Socket which based UDP
- table-cell完成左侧定宽,右侧定宽及左右定宽等布局
- mac中利用brew实现多版本php共存以及任意切换
- 关于使用Unity开发Kinect时出现的Runtime Error错误的解决方式
- eureka服务搭建
- Flutter项目之app升级方案
- numpy中的广播
- postgresql-JSON使用
- webpack 开发环境与生成环境的 配置
- 自己写的开源MVC-easyMVC分享
- [算法]从一道题引出variable-precision SWAR算法
热门文章
- 雪花算法对System.currentTimeMillis()优化真的有用么?
- JSOI2021 游记
- MISA(在线)注释叶绿体基因组SSR
- 使用SpringBoot实现文件的下载
- A Child&#39;s History of England.23
- Hive(一)【基本概念、安装】
- org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: cannot generate all output rows for a Partition解决
- Web安全学习二
- Shell学习(十)——du、df命令
- Oracle——创建存储过程