로또 번호를 뽑을때 같은 수를 두번 선택할 수 없다.
단순히
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
...