소프트웨어/C

[2003년 중간 7번] 로또 번호 생성기 - 무작위 숫자 생성

카켈 2007. 2. 6. 02:04



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 <stdio.h>
#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() 함수