酷代码 AI
菜单

c++题目描述 乌拉乎太饿了,于是他来到了一家自助餐厅准备吃大餐,共有 n n 盘食物,编号依次为 1 1 ~ n n,且每盘食物都有各自不同的饱腹值 a i ai。乌拉乎目前饥饿度为 m m,如果某一盘食物的饱腹值为 5 5,那么吃掉这盘食物之后,乌拉乎的饥饿度就会减少 5 5点。当乌拉乎的饥饿度首次小于等于 0 0,那么乌拉乎就吃饱不会再吃了。 乌拉乎想要按顺序选择并吃掉一些食物,因为并不是所有的食物他都喜欢,例如编号为 3 3 的倍数,以及编号为 7 7 的倍数的食物,乌拉乎都不喜欢。 请你编写程序,输出乌拉乎吃完编号为多少的食物后就吃饱了。如果选完了 n n 盘食物,乌拉乎依然没有吃饱,那么输出 − 1 −1。 输入格式 输入共两行。 第一行包含两个正整数 n n 和 m m,分别表示食物的数量,以及乌拉乎的饥饿度。 第二行包含 n n 个正整数,依次表示编号为 1 1 ~ n n 盘食物对应的饱腹值。 输出格式 一个整数 i i,表示吃完编号为 i i 的食物之后,乌拉乎就吃饱了,如果选完了 n n 盘食物,乌拉乎依然没有吃饱,则输

以下是解决该问题的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)$,只使用了常数级的额外空间。 [2025-11-22 17:08:50 | AI问答 | 495点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多