一天,童童来银行存款,童童发现银行里一个有趣的现象。这个银行有A、B两个窗口,且办理业务的速度不一样,其中A窗口处理速度是B窗口的2倍:即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。 童童突然想到可以用程序提前知道按业务处理完成的顺序顾客的编号,你能帮助他吗? (注意多组测试数据) C++实现
时间: 2024-04-10 21:27:17 浏览: 192
红童童圣诞欢乐节推广方案-24P_市场运营_企划活动营销策划方案.pdf
当然可以帮助你!这是一个经典的模拟题,可以使用队列来模拟A、B两个窗口的顾客处理过程。下面是C++的实现代码:
```cpp
#include <iostream>
#include <queue>
using namespace std;
void processCustomers(queue<int>& customersA, queue<int>& customersB, int numCustomers) {
int processedA = 0; // 记录A窗口已处理的顾客数量
int processedB = 0; // 记录B窗口已处理的顾客数量
for (int i = 1; i <= numCustomers; i++) {
if (processedA < processedB * 2) {
customersA.push(i);
processedA++;
} else {
customersB.push(i);
processedB++;
}
}
while (!customersA.empty()) {
cout << customersA.front() << " ";
customersA.pop();
}
while (!customersB.empty()) {
cout << customersB.front() << " ";
customersB.pop();
}
cout << endl;
}
int main() {
int numTests;
cin >> numTests;
for (int i = 0; i < numTests; i++) {
int numCustomers;
cin >> numCustomers;
queue<int> customersA;
queue<int> customersB;
processCustomers(customersA, customersB, numCustomers);
}
return 0;
}
```
你可以输入多组测试数据并查看每组测试数据的顾客处理完成的顺序。希望对你有帮助!如果有任何问题,请随时提问。
阅读全文