问题 A: 魔法师与扑克牌游戏
时间限制: 1 Sec 内存限制: 128 MB
提交: 55 解决: 36
[提交] [状态] [命题人:外部导入]
题目描述
魔法师在玩一种扑克牌游戏,n张扑克分别记上1,2, ...,n。他打开第一张是1,把它放在一边,然后把最上面的两张一张一张地依次移到最后,打开上面一张刚好是2,再放在一边;然后把上面的3张一张一张移到最后 ,打开上面一张刚好是3,再放到一边;...如此重复下去,直到打开最后一张是n,放在一边,这时他发现,放在一边的扑克刚好是1,2,...,n 这样排列的。请编程输出这些扑克原来是怎么排列的。
输入
一行一个正整数n。
输出
一行n个正整数,表示这些扑克牌原来的排列顺序,每两个数之间有一个空 格。
样例输入 Copy
5
样例输出 Copy
1 4 5 2 3
提示
数据范围:
对于70%的数据:n≤100。
对于100%的数据:n≤10000。
直接上解法
#include<bits/stdc++.h>
using namespace std;
queue<int> q;
int ans[100000];
int main() {
int m=0,n;
cin>>n;
int x=n;
for(int i=1;i<=n;i++) {
q.push(x);
if(x==1) break;
for(int j=x%q.size();j>=1;j--) {//循环取余-剪枝
q.push(q.front());
q.pop();
}
x--;
}
for(int i=1;i<=n;i++){
ans[i]=q.front();
q.pop();
}
for(int i=n;i>=1;i--) printf("%d ",ans[i]);
return 0;
}