前言
一、题目链接
二、题目详情
三、C++参考代码
/*
C++队列Queue类成员函数如下:
back() 返回最后一个元素
empty() 如果队列空则返回真
front() 返回第一个元素
pop() 删除第一个元素
push() 在末尾加入一个元素
size() 返回队列中元素的个数
*/
#include <iostream>
#include <queue>/*c++队列queue模板类的定义在<queue>头文件中*/
using namespace std;
int n;
int main()
{
/*定义queue对象*/
queue<int>A;
queue<int>B;
cin>>n;
int k;
for(int i=1;i<=n;i++)
{
scanf("%d",&k);
if(k%2!=0)
A.push(k);
else
B.push(k);
}
while(!A.empty()&&!B.empty())//情况一:A队列和B队列均不为空。
{
if(A.size()>=2&&B.size()>=1)
{
cout<<A.front()<<" ";
A.pop();
cout<<A.front()<<" ";
A.pop();
cout<<B.front()<<" ";
B.pop();
}
/*————————————————————————————————————————————————*/
/*这一部分不加也可以ac(accept)。
但试想一下,如果样例中有一组数据,
A队列的元素个数是B队列元素个数的两倍,最后出队的一组(A队列中最后2个元素和B队列中最后1个元素)
这时候输出B.front()就不应该在后面加空格了,因为题目中要求“最后一个编号后不能有多余的空格”;
如果样例中有一组数据,原本A队列中有3个元素,B队列有2个元素,经过一次出队操作(A队列出队两个元素,
B队列出队一个元素),A队列中只有一个元素,B队列中也只有一个元素,此时满足A队列不为空,B队列不为空
的条件,但匹配不到满足的if()条件了,因此,我在这一部分的第2段补充了此种情况。
*/
if(A.size()==2&&B.size()==1)
{
cout<<A.front()<<" ";
A.pop();
cout<<A.front()<<" ";
A.pop();
cout<<B.front();
B.pop();
}
if(A.size()==1&&B.size()==1)
{
cout<<A.front()<<" ";
A.pop();
cout<<B.front();
B.pop();
}
/*————————————————————————————————————————————————*/
}
while(!A.empty()&&B.empty())//情况二:A队列不为空,B队列为空。
{
if(A.size()>1)
{
cout<<A.front()<<" ";
A.pop();
}
else
{
cout<<A.front();
A.pop();
}
}
while(A.empty()&&!B.empty())//情况三:A队列为空,B队列不为空。
{
if(B.size()>1)
{
cout<<B.front()<<" ";
B.pop();
}
else
{
cout<<B.front();
B.pop();
}
}
return 0;
}