纸牌问题
问题描述
解题思路
在用队列来模拟操作,当牌大于或等于两张,输出对首,队首出队,将新的队首的值压入队尾,队首出队。如此往复。直至只剩一个牌。
注意
这里的输出格式甚是诡异,一定要注意,一定要完全按照它的要求来
代码如下:
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
queue<int>q;
for(int i=1;i<=n;i++)
q.push(i);
cout<<"Discarded cards:";
while(!q.empty())
{
if(q.size()>2){
cout<<" "<<q.front()<<",";
q.pop();
q.push(q.front());
q.pop();
}
else if(q.size()==2){
cout<<" "<<q.front();
q.pop();
q.push(q.front());
q.pop();
}
else if(q.size()==1)
break;
}
cout<<endl;
cout<<"Remaining card: "<<q.front()<<endl;
}
}