#t216. 苹果和虫子

苹果和虫子

苹果和虫子

题目描述

你买了一箱 n \,n\,个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每 x \,x\,小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过 y \,y\,小时你还有多少个完整的苹果?

输入格式

输入仅一行,包括 n,x \,n,x\,和 y\,y(均为非负整数)。输入数据保证 y≤nx\,y\le nx。

输出格式

输出也仅一行,剩下的苹果个数。

样例输入

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。