로또 번호를 뽑을때 같은 수를 두번 선택할 수 없다.
단순히
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
...
'c/c++' 카테고리의 다른 글
쓰레드를 이용한 행렬 곱연산 (0) | 2010.09.16 |
---|---|
c/c++ 2차원(이차원) 배열 동적할당 방법2 (0) | 2010.08.06 |
c언어 2차원(이차원) 배열 동적 할당 방법 (0) | 2010.08.03 |
math.h 의 sqrt()를 사용하지 않고 제곱근 구하기 (0) | 2010.08.03 |
sin 그래프 (0) | 2010.07.30 |