酷代码 AI
菜单
服务商

C++ 实现:乌拉乎自助餐厅饱腹问题求解及代码详解

以下是解决该问题的C++代码: ```cpp #include <iostream> using namespace std; int main() { int n, m; // 输入食物的数量n和乌拉乎的饥饿度m cin >> n >> m; int satiety; for (int i = 1; i <= n; i++) { // 跳过乌拉乎不喜欢的食物(编号为3的倍数或7的倍数) if (i % 3 == 0 || i % 7 == 0) { continue; } // 输入当前食物的饱腹值 cin >> satiety; // 减去当前食物的饱腹值 m -= satiety; // 判断是否吃饱 if (m <= 0) { // 输出吃饱时吃的食物编号 cout << i << endl; return 0; } } // 如果选完所有食物还没吃饱,输出 -1 cout << -1 << endl; return 0; } ``` 代码解释: 1. 输入部分:首先读取食物的数量`n`和乌拉乎的饥饿度`m`。 2. 循环遍历食物:使用`for`循环从编号1到`n`遍历每一盘食物。 3. 跳过不喜欢的食物:如果当前食物的编号是3的倍数或者7的倍数,则跳过该食物,继续处理下一盘食物。 4. 处理喜欢的食物:读取当前喜欢的食物的饱腹值,将其从乌拉乎的饥饿度中减去。 5. 判断是否吃饱:每次减去饱腹值后,检查乌拉乎的饥饿度是否小于等于0。如果是,则输出当前食物的编号并结束程序。 6. 未吃饱的情况:如果遍历完所有食物后,乌拉乎的饥饿度仍然大于0,则输出 -1。 复杂度分析: - 时间复杂度:$O(n)$,其中`n`是食物的数量。因为只需要遍历一次所有食物。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 495点数解答 | 2025-11-22 17:08:50]

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