问题描述:一副牌面为从 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;
}