大象喝水

GitHub跳转原题关系图返回列表

计算圆柱水桶体积并换算成升,再用向上取整求至少需要多少桶。

OJ: luogu

题目 ID: B2029

难度:入门

标签:入门数学python

日期: 2026-07-15 23:33

题意

水桶是圆柱体,深度为 h 厘米,底面半径为 r 厘米。大象需要喝 20 升水,题目规定 π=3.14\pi = 3.14。求至少需要多少桶水。

思路

一个圆柱水桶的体积是:

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)))

复杂度

时间复杂度是 O(1)O(1),空间复杂度是 O(1)O(1)

总结

单位换算题要先把公式写清楚:立方厘米除以 1000 变成升,再对桶数向上取整。