题目描述 Description
桌面上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n.当至少还剩两张排时进行一下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后。输入n。输出每次扔掉的牌,以及最后剩下的牌。。
输入描述 Input Description
输入n
输出描述 Output Description
输出每次扔掉的牌,以及最后剩下的牌
样例输入 Sample Input
7
样例输出 Sample Output
1 3 5 7 4 2 6
直接模擬即可。
代碼實現:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 int n,head,tail,q[300000]; 3 int main(){ 4 scanf("%d",&n); 5 for(int i=1;i<=n;i++) q[head++]=i; 6 while(head>tail){ 7 printf("%d ",q[tail++]); 8 q[head++]=q[tail++]; 9 } 10 return 0; 11 }
其實,如果數大的話(然而數據水),隊列很容易不夠用,用STL的隊列,或者滾動數組即可。