题意:先将第一张牌扔出,将第二张牌插到队列末尾,直到没牌
题解:使用循环队列(底层)
//底层实现循环队列
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=55;
int cq[maxn],headcq,tailcq;
void pushcq(int v)
{
cq[tailcq++]=v;
tailcq%=maxn;
}
void popcq()
{
headcq++;
headcq%=maxn;
}
int frontcq()
{
return cq[headcq];
}
int sizecq()
{
return (tailcq+maxn-headcq)%maxn;
}
void initcq()
{
headcq=tailcq=0;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n){
initcq();
for(int i=1;i<=n;i++){
pushcq(i);
}
printf("Discarded cards:");
int nofirst=0;
while(sizecq()>=2){
if(nofirst){
printf(",");
}
nofirst=1;
printf(" %d",frontcq());
popcq();
pushcq(frontcq());
popcq();
}
printf("\nRemaining card: %d\n",frontcq());
}
return 0;
}