/*
 * ------------------------------------
 *     랜덤한 순열

 * ------------------------------------
 */

 

#include <stdio.h>
#include <stdlib.h>

#define N 20

int irnd(int);

int main(void)
{
    int i,j,d,a[N+1];

    for (i=1;i<=N;i++)
        a[i]=i;

    for (i=N;i>1;i--){
        j=irnd(i-1);
        d=a[i];a[i]=a[j];a[j]=d;
    }

    for (i=1;i<=N;i++)
        printf("%d ",a[i]);

    printf("\n");

    return 0;
}

 

int irnd(int n)        /* 1 ~ N 의 난수 */
{
    return (int)(rand()%n + 1);
}

 

// a[1]~a[N]에 1~N의 수를 순서대로 저장한다.

1~N-1중에서 난수 j를 얻는다. 이것을 첨자로 하는 배열 a[j]와 a[N]을 교환한다. 이렇게 해서

a[N]항의 순열은 확정된다.

+ Recent posts