【题目链接】
ybt 1032:大象喝水
OpenJudge NOI 1.3 14:大象喝水
【题目考点】
1. 数学知识
柱体体积 = 底面积*高
圆面积 =
π
∗
r
2
\pi *r^2
π∗r2
长度单位厘米
c
m
cm
cm,面积单位:平方厘米
c
m
2
cm^2
cm2,体积单位:立方厘米
c
m
3
cm^3
cm3,
表示液体体积时,用升
L
L
L与毫升
m
l
ml
ml表示,1毫升即为1立方厘米。
1升为1000毫升,
1
L
=
1000
m
l
1L=1000ml
1L=1000ml
2. 向上取整函数ceil()
函数声明:double ceil(double x);
取大于等于x的最小的整数。
【解题思路】
- 设大象至少要喝的水为w,一桶水体积为b,大象要喝x桶水。
有不等式 w > = b ∗ x w >= b * x w>=b∗x, 即 x > = w / b x >= w / b x>=w/b
因为x是整数,所以x能取到的最小值为 ⌈ w b ⌉ \lceil \frac{w}{b} \rceil ⌈bw⌉(向上取整) - 本题中,水桶体积
π
∗
r
2
∗
h
\pi * r^2 * h
π∗r2∗h,单位毫升。除1000后,以升为单位,
所以有 b = π ∗ r 2 ∗ h / 1000 b = \pi * r^2 * h / 1000 b=π∗r2∗h/1000,而题目中给出了 w = 20 w = 20 w=20,求 w / b w/b w/b向上取整
所以最终写出的C++表达式为ceil(20/(PI*r*r*h/1000))
。
【题解代码】
解法1:用cin,cout输入输出
#include <bits/stdc++.h>
using namespace std;
int main()
{
const double PI = 3.14159;//圆周率
int h, r;//h:高度,r:半径
cin>>h>>r;
cout<<ceil(20/(PI*r*r*h/1000));
return 0;
}
解法2:用scanf,printf输入输出
#include <bits/stdc++.h>
using namespace std;
int main()
{
const double PI = 3.14159;//圆周率
int h, r;//h:高度,r:半径
scanf("%d %d", &h, &r);
printf("%d", (int)ceil(20/(PI*r*r*h/1000)));//ceil()返回值为double类型,应强转为int型输出。
return 0;
}