隨機產生1到n的不重複序列

給別人寫了個一羣老師改卷子 就一個要求就是不能改自己的卷子

產生隨機序列的代碼就在裏面


//N個隨機數用1~N這N個數隨機組成且不重複
#include<bits/stdc++.h>
using namespace std;

struct node
{
    int x,y;
} aa[1000010];

bool cmp(node a,node b)
{
    return a.x<b.x;
}


int * rand_N(int n)//外面要負責釋放返回的指針.
{
    int *pn1=new int[n+1];
    int *pn2=new int[n];
    int i,tmp;
    srand(time(0));
    for( i=0; i<=n; i++)
    {
        pn1[i]=0;
    }
    for(i=0; i<n; i++)
    {
        tmp=rand()%n+1;
        if(pn1[tmp]==0)
        {
            pn2[i]=tmp;
            pn1[tmp] = -1;
        }
        else
            --i;
    }
    delete []pn1;
    return pn2;
}


int main()
{
    int n,i;
    while(~printf("請輸入老師數量\n"))
    {
        scanf("%d",&n);
        int *pn=rand_N(n);
        //for(int i=0;i<n;i++)
        // {
        //   cout<<pn[i]<<",";
        //}
        pn這個數組保存的就是隨機序列
        printf("\n");
        for(i=1; i<=n; i++)
        {
            aa[i].x=pn[i-1];
            aa[i].y=pn[i-1];
        }

        int  xf=1;
        int t;
        if(n&1)
        {
            t=aa[1].y;
            aa[1].y=aa[2].y;
            aa[2].y=t;
            xf=2;
        }
        else
        {
            for(i=xf; i<=n; i=i+2)
            {
                t=aa[i].y;
                aa[i].y=aa[i+1].y;
                aa[i+1].y=t;
            }
        }
        sort(aa+1,aa+n+1,cmp);
        for(i=1; i<=n; i++)
            printf("%d %d\n",i,aa[i].y);
        printf("\n");
        delete[]pn;
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章