题目描述
桌上有一叠牌,从顶面的牌开始往底面依次编号为 1~n。当至少还剩两张牌时进行以下操作:把第一张扔掉,然后把新的第一张放到整叠牌的最后。
输入格式
输入一个正整数 n,2<=n≤1000000,表示起始时牌的张数
输出格式
输出一行,按顺序输出每次扔掉的牌的编号,最后输出最后剩下的牌的编号,两个数之间用一个空格隔开。
样例
【样例输入】
7
【样例输出】
1 3 5 7 4 2 6
题解
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
int n, t;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) q.push(i);
while (q.size() > 2) {
cout << q.front() << " ";
q.pop();
t = q.front();
q.pop();
q.push(t);
}
cout << q.front() << " ";
q.pop();
cout << q.front() << " ";
return 0;
}