问题描述:一副牌面为从 1 到 n 的牌,每次从牌堆顶取一张放桌子上,再取一张牌放到堆底,直到手里没牌,最后桌子上的牌是从 1 到 n 有序,编写程序,输入 n,输出牌堆的顺序数组。
程序如下:
#include<iostream>
#include<deque>
using namespace std;
int main(){
int n;
int *a,*a2,i;
cin>>n;
a=(int*)malloc(sizeof(int)*(n+1));
a2=(int*)malloc(sizeof(int)*(n+1));
deque<int> q;
for(i=1;i<=n;++i)
q.push_back(i);
i=1;
while(!q.empty()){
int t=q.front();
a[i]=t;
a2[t]=i;
i++;
// cout<<t<<" ";
q.pop_front();
t=q.front();
q.pop_front();
q.push_back(t);
}
/*cout<<endl;
for(i=1;i<=n;++i)
cout<<a[i]<<" ";
cout<<endl;*/
for(i=1;i<=n;++i)
cout<<a2[i]<<" ";
return 0;
}
样例输入:10
样例输出:1 6 2 10 3 7 4 9 5 8
样例输入:18
样例输出:1 10 2 18 3 11 4 15 5 12 6 17 7 13 8 16 9 14