一、问题链接
http://noi.openjudge.cn/ch0103/14/
二、问题需求
2.1 已知大象需要喝20升水才能解渴,现只有一个小圆桶可供大象喝水;
2.2 输入两个整数,分别代表小圆桶的深度和底面半径,单位都是厘米,计算并输出大象至少需要喝多少桶水才能解渴,结果应为一个正整数。
三、相关知识点
序号 | 知识点列表 |
|
---|---|---|
3.1 | 桶数的计算 | 显然,大象解渴需要的桶数可通过算式 20000 ÷ v 20000\div v 20000÷v计算,其中 v v v是桶的体积(单位立方厘米或毫升) |
3.2 | 小数进位问题 | 桶的体积
v
v
v可能会包含小数,因此算式
20000
÷
v
20000\div v
20000÷v也可能会包含小数,此时需要将小数部分进位1,例如: ▲ 计算桶数为3.23,则实际需要4桶 ▲ 计算桶数为12.001,则实际需要13桶 ▲ 计算桶数为195,则实际需要195桶 ▲ 以此类推 |
3.3 | Math 类的ceil 方法 | 将一个数的小数部分进位1,小数部分为0或没有小数部分则不进位,称为天花板操作,计算结果是一个double 类型的浮点数,例如:▲ Math.ceil(3.23) 得到4.0▲ Math.ceil(12.001) 得到13.0▲ Math.ceil(195) 得到195.0▲ 以此类推 |
3.4 | 题目规定的圆周率 | π = 3.14159 \pi=3.14159 π=3.14159 |
四、算法思想
4.1 定义并输入两个int
类型的整数h
、r
,分别代表桶的深度、底面半径,单位均为厘米;
4.2 定义double
类型的浮点数v=3.14159*h*r*r
,代表桶的体积,单位立方厘米或毫升;
4.3 定义int
类型的整数ans=(int)Math.ceil(20000/v)
,也即大象解渴需要的桶数,输出ans
。
五、Java程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int h = input.nextInt(); // 定义并输入桶的深度,单位厘米
int r = input.nextInt(); // 定义并输入桶的底面半径,单位厘米
double v = 3.14159 * h * r * r; // 定义并计算桶的体积,单位立方厘米或毫升
int ans = (int) Math.ceil(20000 / v); // 定义并计算大象解渴需要的桶数
System.out.print(ans);
}
}