题目可以用队列(queue)来做,大概思路就是循环直到剩一张牌,奇数次扔牌,偶数次把第一张换到最后,使用队列的push以及pop就可以完成操作,不过需要注意的是格式和只有一张牌的时候不扔牌,这就是为什么代码提交了很多次都是WA的原因,后来加了一个判断,成功AC
代码:
#include<cstdio>
#include<iostream>
#include<sstream>
#include<queue>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
queue<int> card;
int s[n+2],j=0;
for(int i=1;i<=n;i++)
card.push(i);
if (n==1) //一张牌不能扔
{
cout<<"Discarded cards:"<<endl;
cout<<"Remaining card: "<<(card.front())<<endl;
continue;
}
else {
for(int i=1;card.size()!=1;i++)
{
if(i%2!=0)
{
int k;
k=card.front();
card.pop();
s[j]=k;
j++;
}
else{
int k;
k= card.front();
card.pop();
card.push(k);
}
}
}
cout<<"Discarded cards:";
for (int i=0;i<n-2;i++)
cout<<" "<<s[i]<<",";
cout<<" "<<s[n-2]<<endl;
cout<<"Remaining card: "<<(card.front())<<endl;
}
return 0;
}