一、问题链接
http://noi.openjudge.cn/ch0103/15/
二、问题需求
2.1 已知有n
个苹果,虫子每x
小时吃完一个苹果,且在吃完一个苹果之前不会吃另一个,求经过y
小时后还剩余多少个完整的苹果;
2.2 输入三个整数,分别代表上述n
、x
、y
,计算并输出剩余的完整苹果数。
三、相关知识点
序号 | 知识点列表 |
|
---|---|---|
3.1 | 一个计算的例子 | 假设有20个苹果,虫子每3小时吃完一个苹果,共吃了50小时,显然,剩余的苹果数可通过算式 20 − 50 ÷ 3 20-50\div 3 20−50÷3计算,计算结果为3.3333······,则最终结果应该为3 |
3.2 | 小数降位问题 | 显然,在本题中,如果计算结果包含小数部分,则应该将小数部分降位为0,例如: ▲ 计算结果为3.23,则实际剩余3 ▲ 计算结果为12.001,则实际剩余12 ▲ 计算结果为195,则实际剩余195 ▲ 以此类推 |
3.3 | Math 类的floor 方法 | 将一个数的小数部分降位为0,小数部分为0或没有小数部分则不降位,称为地板操作,计算结果是一个double 类型的浮点数,例如:▲ Math.floor(3.23) 得到3.0▲ Math.floor(12.001) 得到12.0▲ Math.floor(195) 得到195.0▲ 以此类推 |
3.4 | 是否会吃出负数结果 | 题目已保证 y ≤ n × x y\leq n\times x y≤n×x,也即虫子不会将苹果吃为负数 |
四、算法思想
4.1 定义并输入三个int
类型的整数n
、x
、y
,分别代表苹果总数、虫子吃完一个苹果需要的时间、虫子吃苹果的总时间;
4.2 定义int
类型的整数ans=(int)Math.floor(n-1.0*y/x)
,代表剩余完整的苹果数,输出ans
。
五、Java程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt(); // 定义并输入苹果总数
int x = input.nextInt(); // 定义并输入虫子吃完一个苹果需要的时间
int y = input.nextInt(); // 定义并输入虫子吃苹果的总时间
int ans = (int) Math.floor(n - 1.0 * y / x); // 定义并计算剩余完整的苹果数
System.out.print(ans);
}
}
六、备注
6.1 本题更简单的解法为:直接令ans=(int)(n-1.0*y/x)
,也即直接取计算结果的整数部分。