这个题主要需要考虑到两点
当A窗口没人时和当B窗口没人时就可以了
如测试案例2 1 3, 2 2 4
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
queue<int>a;//A窗口的队列
queue<int>b;//B窗口的队列
int main(){
int n,k;
cin>>n;
for(int i = 0 ;i < n ;i++){
cin>>k;
if(k%2 == 0){
b.push(k);//偶数入B窗口
}else{
a.push(k);//奇数入A窗口
}
}
bool flag = true;
int t = 0;
while((a.size() != 0 || b.size() != 0)){//如果两个窗口都为空的话结束循环
if(flag){//首先考虑A的情况
if(a.size() == 0){//如果A是空的额,flag = false不执行下面的步骤
flag = false;
continue;
}
if(a.size() == 1 && b.size() == 0){//如果是最后一个换行
cout<<a.front()<<endl;
a.pop();
t++;
}else{
cout<<a.front()<<" ";
a.pop();
t++;
}
if(b.size() == 0){//如果b已经空了,那么下一次还是执行A
t = 0;
flag = true;
}else if(t == 2 ){//如果B不为空而且A已经执行2次了,跳到B
t = 0;
flag = false;
}
}
else{
if(a.size() == 0 && b.size() == 1){
cout<<b.front()<<endl;
b.pop();
}else{
cout<<b.front()<<" ";
b.pop();
}
if(a.size() == 0){//如果A为空,继续执行B
flag =false;
}else{
flag = true;
}
}
}
return 0;
}