#include <bits/stdc++.h> using namespace std; int main() { int n, k; cin >> n >> k; queue<int> q; for (int i = 1; i <= n; i++) { int a; cin >> a; q.push(i); } int cnt = 0; while (!q.empty()) { int t = q.front(); q.pop(); cnt++; if (cnt == k) { while (!q.empty()) { cout << q.front() << " "; q.pop(); } break; } int a = --(a[t - 1]); if (a > 0) { q.push(t); } } return 0; }哪里错了
时间: 2024-01-22 19:03:52 浏览: 308
这段代码中有两个错误:
1. 在 `int a = --(a[t - 1]);` 这一行中,`a` 是一个未定义的变量,应该改为 `int x = --(a[t - 1]);` 或者直接使用 `a[t - 1]--`。
2. 在输出剩余同学的编号时,没有输出最后一个同学的编号。可以在循环结束后再输出一次。
下面是修改后的代码:
```c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
queue<int> q;
for (int i = 1; i <= n; i++) {
int a;
cin >> a;
q.push(i);
}
int cnt = 0;
while (!q.empty()) {
int t = q.front();
q.pop();
cnt++;
if (cnt == k) {
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
cout << t << endl;
break;
}
int x = --(a[t - 1]);
if (x > 0) {
q.push(t);
}
}
return 0;
}
```
这个程序会读入n和k,表示有n个同学在排队打饭,并且需要打k份饭。然后程序会读入每个同学的饭量a[i],并将他们加入队列q中。接下来,程序会不断地从队列中取出同学,并将他们的饭量减1,如果一个同学的饭量变成了0,就将他从队列中弹出。如果已经发了k份饭,就直接输出队列中剩余的同学的编号,这些同学已经吃饱了,同时最后一个同学的编号也要输出。
阅读全文