#t216. 苹果和虫子
苹果和虫子
苹果和虫子
题目描述
你买了一箱个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过小时你还有多少个完整的苹果?
输入格式
输入仅一行,包括和(均为非负整数)。输入数据保证。
输出格式
输出也仅一行,剩下的苹果个数。
样例输入
10 4 9
样例输出
7
提示
一、整除是「向下取整」,不是「向上取整」
9 / 4 = 2 // 实际需要 3 份
但很多问题的意思是「不足一份也算一份」,比如「9 个苹果,每袋装 4 个,要几个袋子」——答案是 3。
二、向上取整的标准写法
int ans = (a + b - 1) / b;
代入验证:
| a(总数) | b(每份) | (a+b-1)/b | 实际需要 |
|---|---|---|---|
| 9 | 4 | (9+3)/4 = 3 | 3 |
| 8 | (8+3)/4 = 2 | 2 | |
| 1 | (1+3)/4 = 1 | 1 | |
| 0 | (0+3)/4 = 0 | 0 |
三、为什么加 b-1 就对
a / b 在「余数为 0」时已经正确,只有「有余数」时才需要多一份。加上 b-1 后:
- 余数为 0:
a + b - 1除以 b 仍是原来的商(因为加的数不够一份); - 余数 >0:刚好凑够一份,商加 1。
四、常见错误
-
直接
a / b,漏掉最后不满一份的那次。 -
写成
(a + b) / b:a 能被整除时会多算一份(8 个 4 个一袋会算成 3 袋)。 -
a、b 顺序写反。
-
先算「经过 y 小时,被吃掉了几个苹果」,这里需要向上取整。
-
用上面的技巧把「不足一个」也算成一个。
-
剩下 = 总数 − 吃掉数;再想一想答案会不会出现负数。
自查:用
10 4 9 → 7验证:9 小时吃了 3 个(2 个整的 + 第 3 个吃了一半),剩 7。