问题描述
桌上有一叠纸牌,共n张牌。从位于顶端的纸牌开始从上往下依次编号为1到n。现在反复进行以下操作:把位于顶端的牌扔掉,然后把新的位于顶端的牌放到整叠牌的底部。直到只剩下一张牌。输入n(<=1000000),输出每次扔掉的牌的编号以及最后剩下的牌的编号。
输入格式
一个整数n
输出格式
一行,n个空格间隔的整数,表示题目所求的编号
样例输入
7
样例输出
1 3 5 7 4 2 6
用数组删上面太繁琐,直接用队列函数,吃嘛嘛香。
#include<bits/stdc++.h>
using namespace std;
int main()
{
queue<int> a;//定义列表
int n,i;
cin>>n;
for(i=1;i<=n;i++){
a.push(i);//获得序号
}
while(a.size()){
cout<<a.front()<<" ";//输出顶数
a.pop();//删除顶数
a.push(a.front());//下一顶数放置末尾
a.pop();//删除顶数
}
return 0;
}
注:第14和15行是将最上移至最下。