计算圆柱水桶体积并换算成升,再用向上取整求至少需要多少桶。
OJ: luogu
题目 ID: B2029
难度:入门
标签:入门数学python
日期: 2026-07-15 23:33
题意
水桶是圆柱体,深度为 h 厘米,底面半径为 r 厘米。大象需要喝 20 升水,题目规定
思路
一个圆柱水桶的体积是:
text
3.14 * r * r * h 立方厘米因为 1000 立方厘米等于 1 升,所以一桶水的升数是:
text
3.14 * r * r * h / 1000需要的桶数是 20 / 每桶升数 向上取整。
本题是直接公式计算,不需要暴力程序。
Python 知识
map(int, input().split())可以一行读取两个整数。math.ceil(x)表示向上取整。- 本题要使用题面指定的
3.14,不要改用math.pi。
代码
python
import math
h, r = map(int, input().split())
bucket = 3.14 * r * r * h / 1000
print(math.ceil(20 / bucket))cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-27 00:00
* update_at: 2026-07-27 00:00
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int h, r; // 水桶深度(厘米),底面半径(厘米)
cin >> h >> r;
// 圆柱体积 = π * r^2 * h,除以 1000 换算成升,π 取 3.14
double volume = 3.14 * r * r * h / 1000;
// 20 升水除以每桶升数,向上取整得到至少需要的桶数
int need = ceil(20.0 / volume);
cout << need << endl;
return 0;
}Pythonic 写法
math.ceil:
python
import math
h, r = map(int, input().split())
print(math.ceil(20 / (3.14 * r * r * h / 1000)))复杂度
时间复杂度是
总结
单位换算题要先把公式写清楚:立方厘米除以 1000 变成升,再对桶数向上取整。