1.使用vector从头至尾模拟卡片的从上到下。
2.每一次丢卡和拿卡放在最下面(push_back)视为一次操作,操作最多m-1次
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
int m;
while (cin >> m)
{
if(!m) break;
vector<int>card;
int flag=0;
card.push_back(0);
for(int i=1; i<=m; i++)
{
card.push_back(i);
}
cout << "Discarded cards:" ;
for(int i=0; i<m-1; i++)
{
for(int j=1; j<=2*m; j++)
{
if(card[j]!=0&&flag==1)
{
cout <<", " <<card[j];
card[j]=0;
break;
}
if(card[j]!=0&&flag==0)
{
flag=1;
cout << " " << card[j];
card[j]=0;
break;
}
}
for(int j=1; j<=2*m; j++)
{
if(card[j]!=0)
{
card.push_back(card[j]);
card[j]=0;
break;
}
}
}
cout <<endl;
for(int i=0; i<=2*m; i++)
{
if(card[i]!=0)
{
cout <<"Remaining card: " << card[i]<<endl;
break;
}
}
}
return 0;
}