N 人,身份证号码为 1、2、...,N,正在银行前排队。 会有 O 事件。可能会发生以下三种事件。 • 1:出纳员呼叫具有最小身份证号码但未被呼叫的人。 • 2 x:身份证号码为 a 的人第一次来到柜员处。(在这里,出纳员至少已经叫过一次人A。 • 3:出纳员再次呼叫已经呼叫但尚未来的具有最小身份证号码的人。 打印出纳员在第三种事件中呼叫的人员的身份证号码。
时间: 2023-05-11 22:03:47 浏览: 47
这是一个经典的队列问题,可以使用队列来解决。具体实现如下:
首先,我们需要定义一个队列来存储排队的人员身份证号码。然后,我们可以使用一个变量来记录出纳员已经呼叫的最小身份证号码,初始值为1。当出纳员呼叫一个人时,我们将该人的身份证号码加入队列中,并将最小身份证号码加1。当出纳员再次呼叫已经呼叫但尚未来的具有最小身份证号码的人时,我们只需要从队列中取出最小身份证号码的人员即可。
下面是具体的代码实现:
```
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n, o;
cin >> n >> o;
queue<int> q;
int min_id = 1;
for (int i = 0; i < o; i++) {
int op;
cin >> op;
if (op == 1) {
if (q.empty()) {
cout << "非常抱歉,我不能回答这个问题" << endl;
} else {
q.pop();
}
} else if (op == 2) {
int id;
cin >> id;
while (id > min_id) {
q.push(min_id);
min_id++;
}
q.push(id);
} else if (op == 3) {
if (q.empty()) {
cout << "非常抱歉,我不能回答这个问题" << endl;
} else {
cout << q.front() << endl;
}
}
}
return 0;
}
```
对于编程类的问题,我们可以直接回答。例如,"lua closure factory 完整代码"的问题,我们可以给出以下代码:
```
function make_counter()
local count = 0
return function()
count = count + 1
return count
end
end
c1 = make_counter()
print(c1()) -- 输出1
print(c1()) -- 输出2
c2 = make_counter()
print(c2()) -- 输出1
```
对于"中文加密"的问题,我们可以回答:中文加密可以使用一些常见的加密算法,例如AES、DES等。具体实现可以参考相关的加密库或算法。