중복없는 숫자 뽑기

c/c++ 2010. 7. 29. 14:18


로또 번호를 뽑을때 같은 수를 두번 선택할 수 없다.
단순히
while(i<100)
        number[i++] = rand()%10;
하면 같은 수가 두번이상 생길 수 있다.
로또 번호 선택할때처럼 중복하지 않는 임의의 수를 뽑아보자.

조건 : 맨 첫자리 숫자는 0이 아닌 수인 경우

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

enum { MAX = 6 };

char* rand_no_repeat(char *);

int main( int argc, char *argv[])
{
    int i=0;
    char number[MAX+1];

    srand( (unsigned)time(NULL) );
    for( i=0; i<100; i++)
        printf("%s\n",rand_no_repeat(number));
}
char* rand_no_repeat(char* number)
{
    int i,j;
    for( i=0; i<MAX; i++)
        number[i] = 0;
    number[0] = rand()%9+1;
    for( i=1; i<MAX; i++) {
        number[i] = rand()%10;
        for( j=0; j<i; j++) {
            if( number[i]==number[j]) {
                number[i] = rand()%10;
                j=-1;
            }
        }
    }
    for( i=0; i<MAX; i++)
        number[i] += '0';
    number[MAX] = '\0';
    return number;
}


출력 결과 (예시)
564830
805423
106519
598213
846792
...

조건 : 맨 첫자리 숫자가 0이어도 상관 없는 경우
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

enum { MAX = 6 };

char* rand_no_repeat(char *);

int main( int argc, char *argv[])
{
    int i=0;
    char number[MAX+1];

    srand( (unsigned)time(NULL) );
    for( i=0; i<100; i++)
        printf("%s\n",rand_no_repeat(number));
}
char* rand_no_repeat(char* number)
{
    int i,j;
    for( i=0; i<MAX; i++)
        number[i] = 0;
    for( i=0; i<MAX; i++) {
        number[i] = rand()%10;
        for( j=0; j<i; j++) {
            if( number[i]==number[j]) {
                number[i] = rand()%10;
                j=-1;
            }
        }
    }
    for( i=0; i<MAX; i++)
        number[i] += '0';
    number[MAX] = '\0';
    return number;
}


출력 결과 (예시)
165037
387546
601834
073158
820564
...

Posted by Нуеоп
,