思路很简单:
我们就先把正数,负数,零分别放入三个集合中:
stack<int>zero;
stack<int>po;
stack<int>ne;
然后进行处理:
其中要讨论的情况有:
正数集为空,需要从负数集中抽取两个元素
负数集元素个数为偶数,需要将奇数个(这里抽一个便可)元素丢进0集中
处理好之后,就可以顺利AC啦~
#include<bits/stdc++.h>
using namespace std;
int main()
{
stack<int>zero;
stack<int>po;
stack<int>ne;
int n;cin>>n;
int k;
int cnt0=0,cnt1=0,cnt2=0;
while(n>0){
cin>>k;
n--;
if(k==0){zero.push(k);cnt2++;}
else if(k<0){ne.push(k);cnt0++;}
else if(k>0){po.push(k);cnt1++;}
}//结束
//处理
if(po.empty()){
po.push(ne.top());ne.pop();
po.push(ne.top());ne.pop();//将两个负数压入正集合
cnt0-=2;
cnt1+=2;
if(cnt0%2==0) {zero.push(ne.top());ne.pop();cnt0--;cnt2++;}
}
if(cnt0%2==0) {zero.push(ne.top());ne.pop();cnt0--;cnt2++;}
cout<<cnt0<<' ';
while(!ne.empty())
{
cout<<ne.top()<<' ';
ne.pop();
}
cout<<endl;
cout<<cnt1<<' ';
while(!po.empty())
{
cout<<po.top()<<' ';
po.pop();
}
cout<<endl;
cout<<cnt2<<' ';
while(!zero.empty())
{
cout<<zero.top()<<' ';
zero.pop();
}
cout<<endl;
return 0;//养成好习惯
}
```