#P5709. 【深基2.习6】Apples Prologue / 苹果和虫子
【深基2.习6】Apples Prologue / 苹果和虫子
【深基2.习6】Apples Prologue / 苹果和虫子
题目来源
洛谷 P5709
题目描述
小 B 喜欢吃苹果。她现在有 ()个苹果,吃完一个苹果需要花费 ()分钟,吃完一个后立刻开始吃下一个。现在时间过去了 ()分钟,请问她还有几个完整的苹果?
输入格式
输入三个非负整数表示 。
输出格式
输出一个整数表示答案。
样例输入
50 10 200
样例输出
30
提示
一、除以 0 会直接崩溃
在 C++ 里,整数除以 0 不是得到 0,也不是无穷大,而是「未定义行为」:
int x = 5 / 0; // 运行时错误,评测显示 RE
评测机会判你 RE(Runtime Error),而不是 WA。看到 RE 又找不到数组越界,先查有没有除零。
二、什么时候会除零
只要除数是一个「算出来的量」,就要怀疑它可能是 0:
- 速度
s可能为 0; - 份数
n可能为 0; - 时间
t可能为 0。
三、现在能做的三件事
- 先看题目保证:题面如果说「保证 s > 0」,那就不用管。
- 检查数据范围:范围包含 0 就要小心。
- 用等价的乘法代替除法:比如判断
a / b > c,在 b > 0 时可以改写成a > c * b,避开除法。
真正要用「如果为 0 就特殊处理」,需要 if 分支——第 8 章会讲,这里先知道现象和成因。
四、自检
提交后如果是 RE,把每个除法都圈出来,问自己「这个除数有没有可能是 0」。
- 模型和上一题一样:先算吃掉几个,再相减。
- 先看数据范围里哪个参数可能为 0,再决定要不要单独处理。
t = 0时:0 分钟吃一个,时间过去再久也早就吃完了,结果应该是什么?
自查:用样例
50 10 200 → 30验证,再自己造一个t=0的输入试运行;如果程序崩溃,就是没处理除零。