思路很简单:
我们就先把正数,负数,零分别放入三个集合中:
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;//养成好习惯
}
```
本文介绍了一种基于栈的数据结构实现的正数、负数和零的分类算法。通过将输入的整数分别存储在三个栈中,该算法能够处理特殊情况,如正数集合为空时从负数集合抽取元素,以及负数集合元素个数为奇数时将其调整为偶数。最终,算法能够正确输出每个集合中元素的数量及具体数值。
795

被折叠的 条评论
为什么被折叠?



