输入样例
8 2 1 3 9 4 11 13 15
输出样例
1 3 2 9 11 4 13 15
简单粗暴 无脑列举 直接判断 最后输出
搞得硬是写了一百行 好呗现在数据结构题均上百行呗 orz
还是我太菜了太菜了
代码代码
#include<iostream>
#include <queue>
using namespace std;
int main()
{
int n;
cin >> n;
queue<int> A;
queue<int> B;
for (int i = 0; i < n; i++) //入队
{
int num;
cin >> num;
if (num % 2 == 1) A.push(num); //num是奇数
else if (num % 2 == 0) B.push(num); //num是偶数
}
//A数量与B数量的两倍相同
if (A.size() == 2 * B.size())
{
for (int i = 0; i < A.size()/2; i++)
{
cout << A.front() << " ";
A.pop();
cout << A.front() << " ";
A.pop();
if (i = A.size() / 2 - 1)
{
cout << B.front();
B.pop();
}
else
{
cout << B.front() << " ";
B.pop();
}
}
}
//A数量大于B数量的两倍,最后一个肯定是A中的数
else if (A.size() > 2 * B.size())
{
while (A.size())
{
//B为空且A不止一个数
if (B.size() == 0 && A.size()!=1)
{
cout << A.front() << " ";
A.pop();
}
//B为空且A只有最后一个数
else if (B.size() == 0)
{
cout << A.front();
A.pop();
}
//B不为空
else if (B.size())
{
cout << A.front() << " ";
A.pop();
cout << A.front() << " ";
A.pop();
cout << B.front() << " ";
B.pop();
}
}
}
//A小于B的两倍,最后一个数肯定是B中的数
else
{
while (A.size())
{
//若A只剩最后一个
if (A.size() == 1)
{
cout << A.front() << " ";
A.pop();
}
//A至少有两个
else
{
cout << A.front() << " ";
A.pop();
cout << A.front() << " ";
A.pop();
cout << B.front() << " ";
B.pop();
}
}
//输出B剩下的数
while (B.size())
{
if (B.size() == 1)
{
cout << B.front();
B.pop();
}
else
{
cout << B.front() << " ";
B.pop();
}
}
}
}