[2003년 중간 7번] 로또 번호 생성기 - 무작위 숫자 생성
1. 목적
- 난수를 원하는 범위 내에서 원하는 형식으로 만들어 낸다.
2. 문제
- 로또 번호 생성기를 만들어 낸다.
- 로또 번호는 1 부터 45 까지 6개의 숫자가 한 세트 이다.
- 엔터키를 치면 계속 나오게 설계 한다.
- 코드 힌트

(예제 코드)

- 출력 화면
로또번호 생성기 [ENTER]를 치시면 계속 나옵니다.
=================================================
당첨번호 : 23 36 20 4 26 16
당첨번호 : 42 31 38 17 9 38
당첨번호 : 6 7 18 46 34 13
당첨번호 : 8 6 3 14 27 36
당첨번호 : 30 21 18 34 32 28
당첨번호 : 25 14 1 23 35 23
당첨번호 : 45 46 10 32 3 11
당첨번호 : 32 19 3 45 41 15
당첨번호 : 26 23 31 38 13 11
당첨번호 : 39 6 21 5 9 16
당첨번호 : 43 38 21 2 42 36
당첨번호 : 2 15 35 30 8 20
당첨번호 : 16 43 34 25 46 4
3. 이해
- 난수를 원하는 범위 만큼 원하는 갯수 만큼 뽑아 낼수 있는가?
- Enter 키를 누름으로 계속 반복할수 있게 할수 있는가?
4. 코드
#include <stdlib.h>
#include <time.h>
int main()
{
int lotto[6] = {0};
int i, j, number;
i = number = j = 0;
srand((unsigned)time(NULL));
rand();
printf("=================================================\n");
printf(" 로또번호 생성기 [ENTER]를 치시면 계속 나옵니다.\n");
printf("=================================================\n");
do
{
printf("당첨번호 : ");
for(i = 0; i <= 5; i++)
{
number = rand() % 46 + 1;
while(j <= 5)
{
if(lotto[j] == 0) break;
if(lotto[j] == number)
{
srand((unsigned)time(NULL));
number = rand() % 46 + 1;
j = 0;
}
j++;
}
j = 0;
lotto[i] = number;
}
j = 0;
while(j <= 5)
{
printf("%2d ", lotto[j]);
j++;
}
getchar();
}while(1);
return 0;
}
5. 해설
- rand() 함수는 0 ~ 32767 까지 수를 무작위로 출력하는 함수입니다.
- srand 함수는 rand() 함수가 계속 다른 난수를 뽑아 낼수 있게 만들어 주는 함수입니다.
기준값을 시간으로 뒤서 계속 난수룰 뽑을수 있게 합니다.
- while(1) 은 1이라는 조건 결과가 참이기 떄문에 계속 반복하게 할수 있습니다.
- 기존 선발된 로또 번호를 검색하여 중복이 되면 다시 시작하여 검색하는 루틴이 있습니다.
- 최적화를 위해 입력이 안된 부분 비교시 넘어가게 설계 되었습니다.
6. 참고
- http://www.winapi.co.kr/clec/cpp1/8-2-1.htm : rand() 함수