1. 问题分析与算法设计
这个题目看似简单,但实际上考察了几个重要的编程概念和边界条件处理。我们先来拆解题目要求:
题目描述:有一箱n个苹果,其中混入了一条虫子。虫子每x小时能吃掉一个苹果,并且在吃完一个苹果之前不会开始吃另一个。问经过y小时后,还剩下多少个完整的苹果?
1.1 核心逻辑解析
关键在于理解虫子吃苹果的规则:
- 虫子吃苹果是"串行"的,不是"并行"的
- 只有当完全吃完一个苹果后,才会开始吃下一个
- 如果吃苹果的时间不足一个完整周期,那个苹果也算被"破坏"了
举个例子:
- 如果x=4小时/苹果,y=9小时
- 虫子可以吃完2个苹果(4+4=8小时)
- 第9小时时,已经开始吃第3个苹果
- 所以总共"消耗"了3个苹果(2个吃完,1个正在吃)
1.2 边界条件考虑
需要特别注意的边界情况:
- 当y=0时,应该返回n(没有时间消耗)
- 当x=0时,理论上虫子瞬间吃完所有苹果(但题目保证输入均为正整数)
- 当y/x的结果超过n时,应该返回0而不是负数
- 当y正好是x的整数倍时,不需要额外+1
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码实现详解
让我们逐行分析给出的C++解决方案:
cpp复制#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,y;
cin>>n>>x>>y;
if(y%x == 0){ // 判断是否有余数
if(n-(y/x) >= 0){ // 检查箱子里是否还有苹果
cout<< n-(y/x);
}else{
cout<< 0;
}
}else{ // 有余数,需要多算一个苹果
if(n-(y/x+1) >= 0){
cout<<n-(y/x+1);
}else{
cout<<0;
}
}
return 0;
}
2.1 输入处理
cpp复制int n,x,y;
cin>>n>>x>>y;
这部分很简单,就是读取三个整数输入:苹果总数n,虫子吃一个苹果所需时间x,以及总时间y。
2.2 核心逻辑分解
代码的核心是处理两种情况:
-
y是x的整数倍:
cpp复制if(y%x == 0){ if(n-(y/x) >= 0){ cout<< n-(y/x); }else{ cout<< 0; } }- 计算y/x得到吃掉的完整苹果数
- 检查剩余苹果是否非负
- 输出结果或0(如果不够)
-
y不是x的整数倍:
cpp复制}else{ if(n-(y/x+1) >= 0){
