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
...