题目大意:对列的经典问题,洗牌,先把一个牌取出,然后把下一张放在最后。
思路:用STL的队列就可以了,每次循环出队两次,第一次的值输出,第二次的值入队。直到最后一个值,输出即可。
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int t;
while(cin>>t,t){
queue<int> q;
for(int i=1;i<=t;i++){
q.push(i);
}
cout<<"Discarded cards:";
while(q.size()>=2){
if(q.size()==2) cout<<" "<<q.front();
else
cout<<" "<<q.front()<<",";
q.pop();
q.push(q.front());
q.pop();
}
cout<<endl;
cout<<"Remaining card: ";
cout<<q.front();
cout<<endl;
}
return 0;
}