酷代码 AI
菜单
服务商

乌拉乎的自助餐:C++模拟进食过程与开发要点

好的,我们先来一步步分析这个问题,然后给出完整的 C++ 解决方案。 ## 🎯 问题理解与建模 **已知条件:** - 有 `n` 盘食物,编号从 `1` 到 `n`。 - 每盘食物 `i` 的饱腹值为 `a[i]`(题目中 `ai` 即 `a[i]`)。 - 乌拉乎的初始饥饿度为 `m`。 - 吃一盘食物后,饥饿度减少该食物的饱腹值。 - 当**饥饿度首次 ≤ 0** 时,停止进食,输出当前食物的编号。 - 乌拉乎**不喜欢**编号为 **3 的倍数** 或 **7 的倍数** 的食物,这意味着他**不会吃这些食物**。 - 他按顺序从 `1` 到 `n` 考虑食物,只吃喜欢的(即编号不是 3 的倍数且不是 7 的倍数)。 - 如果吃完所有喜欢的食物后饥饿度仍 > 0,则输出 `-1`。 **关键点:** - 不是遍历所有食物,而是跳过不喜欢的。 - 饥饿度减少是在吃喜欢的食物时才发生。 - 首次饥饿度 ≤ 0 时立刻停止,输出当前食物编号。 --- ## 📝 算法步骤 1. 读入 `n` 和 `m`。 2. 读入 `n` 个饱腹值 `a[1..n]`(为方便,可以用 1-based 数组)。 3. 从 `i = 1` 到 `n` 循环: - 如果 `i % 3 == 0` 或 `i % 7 == 0`,跳过(不吃)。 - 否则: - `m -= a[i]` - 如果 `m <= 0`,输出 `i` 并结束程序。 4. 循环结束还没吃饱 → 输出 `-1`。 --- ## ⚙️ C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; int a[n + 1]; // 1-based 数组,方便编号对应 for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i <= n; i++) { // 不喜欢的食物跳过 if (i % 3 == 0 || i % 7 == 0) { continue; } // 吃这盘食物 m -= a[i]; // 检查是否吃饱 if (m <= 0) { cout << i << endl; return 0; } } // 所有喜欢的食物吃完还没吃饱 cout << -1 << endl; return 0; } ``` --- ## 🧪 示例运行 **输入:** ``` 5 10 2 3 4 5 6 ``` **解释:** - n=5, m=10 - 食物1(饱腹2)喜欢 → m=8 - 食物2(饱腹3)喜欢 → m=5 - 食物3(编号3的倍数)跳过 - 食物4(饱腹5)喜欢 → m=0 → 输出4 **输出:** ``` 4 ``` --- ## 🔍 边界情况测试 | 测试用例 | 说明 | 预期输出 | |----------|------|----------| | n=3, m=100, a=[10,20,30] | 所有喜欢食物吃完也不饱 | -1 | | n=3, m=5, a=[10,20,30] | 第一盘就吃饱 | 1 | | n=7, m=8, a=[1,1,1,1,1,1,100] | 编号3、6、7跳过,吃1,2,4,5后饱 | 5 | | n=1, m=5, a=[10] | 第一盘吃饱 | 1 | | n=1, m=5, a=[3] | 第一盘喜欢但没饱,且没有更多食物 | -1 | --- ## 🛠️ 开发建议 1. **数组索引**:使用 1-based 数组可以避免编号与索引的转换,提高代码可读性。 2. **输入规模**:如果 `n` 很大(例如 10^6),确保使用 `iostream` 并关闭同步以加速输入输出: ```cpp ios::sync_with_stdio(false); cin.tie(nullptr); ``` 3. **变量命名**:使用有意义的变量名(如 `hunger` 代替 `m`)能让代码更易维护。 4. **扩展性**:如果不喜欢的食物条件变化(例如增加“编号为质数”),建议将判断逻辑封装成函数 `bool isLiked(int id)`。 5. **验证输入**:在实际应用中,可加入输入合法性检查(如 n>0,饱腹值为正等)。 --- ## 📚 相关技术栈与资源 - **C++ 基础**:循环、条件判断、数组。 - **在线判题平台**:可以在 Codeforces、LeetCode 上找类似“模拟过程”的题目练习。 - **推荐学习**: - 《C++ Primer》第5版 —— 基础语法。 - 算法竞赛入门经典(刘汝佳)—— 模拟类题目详解。 --- ######[AI写代码神器 | 1226点数解答 | 2026-03-13 20:25:37]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]