AC代码,先说算法:
1、输入,比如输入4,然后做个循环1~4,存到队列里,队列里现在是1234;如果输入1,直接按1的结果输出。
2、当队列的size()>1时,
1)先存队首元素1到vector里,vector现在是1
2)队首出队,queue里是234,
3)保存队首元素2,队首2出队,push2到队里,队现在是342
以此类推就行。
3、清空队列和vector,这个很重要。
3、输出,设置迭代器输出就行,注意格式。
代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
queue<int>a;
vector<int>aa;
int main()
{
int n=0;
while(cin>>n&&n!=0)
{
if(n==1) {cout<<"Discarded cards:"<<endl<<"Remaining card: 1"<<endl;}
if(n>=2)
{
for(int i=1;i<=n;i++) a.push(i);
while(a.size()>1)
{
aa.push_back(a.front());
a.pop();
int b=a.front();
a.pop();
a.push(b);
}
cout<<"Discarded cards:";
for(vector<int>::iterator it=aa.begin();it!=aa.end();it++)
{
if(it!=aa.end()-1) cout<<' '<<*it<<',';
else cout<<' '<<*it<<endl;
}
cout<<"Remaining card: "<<a.front()<<endl;
aa.clear();
a.pop();
}
}
return 0;
}
注意:
1、队列的清理用的aa.clear();这个清理删掉了所有元素没有释放内存。
2、队列的几种操作,pop()出队,push()进队,front()队首元素。
3、迭代器的使用,vector遍历经常使用迭代器。