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