P5709 苹果和虫子 解析

10 阅读1分钟

P5709 【深基 2.习 6】Apples Prologue / 苹果和虫子

这是一个非常经典的入门编程题目,主要考察分类讨论边界情况的处理。

以下是按行拆解的解题思路:

  1. 定义三个整型变量 m,t,sm, t, s 并读取输入的数据。
  2. 特判分母为零:检查 tt 是否等于 0。题目提示了 RE(运行错误),如果吃苹果不需要时间,瞬间就吃光了,直接输出 0。
  3. 如果 tt 不为 0,计算在这段时间 ss 内被“破坏”的苹果数量。
  4. 先计算 s/ts / t,得出完整吃掉的苹果个数。
  5. 判断是否正在吃下一个:如果 s%ts \% t 不等于 0(有余数),说明还有一个苹果被咬过了但没吃完,它不再完整,消耗数需要加 1。
  6. 计算剩余苹果数:用总数 mm 减去总消耗数(吃完的 + 正在吃的)。
  7. 特判负数情况:检查计算结果是否小于 0。如果时间 ss 很长,苹果早就吃光了,剩余数量不能是负数,必须修正为 0。
  8. 输出最终确定的剩余苹果数量。

核心代码逻辑参考 (C++)

if (t == 0) {
    cout << 0 << endl;
} else {
    int eaten = s / t; // 完整吃掉的
    if (s % t != 0) {
        eaten++; // 如果有余数,说明正在吃下一个,也算消耗掉了
    }

    int left = m - eaten;

    if (left < 0) {
        cout << 0 << endl; // 防止输出负数
    } else {
        cout << left << endl;
    }
}