- Description
桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行以下操作:把第一张扔掉,然后把新的第一张放到整叠牌的最后。
- Input
输入n,n≤1000000。
- Output
输出每次扔掉的牌,以及最后剩下的牌。
- Sample Input
7
- Sample Output
1 3 5 7 4 2 6
#include<iostream>
using namespace std;
#define N 1000010
int que[2*N];
int main()
{
// freopen("out.txt","w",stdout);
int n;
while(scanf("%d",&n)!=EOF)
{
int front=0,rear=0,i,first=0;
for(i=0;i<n;i++)
que[rear++]=i+1;
while(front<rear)
{
if(!first)
printf("%d",que[front++]),first=1;
else
printf(" %d",que[front++]);
if(front<rear)
que[rear++]=que[front++];
}
printf("\n");
}
return 0;
}