C언어로 Lotto 번호를 생성하는 프로그램을 작성하도록 하겟습니다


Lotto란 1부터 45까지의 수가 적힌 공을 차례로 6번 꺼내어 나오는 조합인데....;
중요한 포인트가 있습니다

일단 ! 예상출력 모습입니다



1. 사용자에게 로또 게임 수를 입력받아 게임의 횟수별로 임의로 6개의 수(1~45)를 자동 하지만 , 생성된 난수는 모두 다른 값이어야 합니다

2. 로또 번호는 수형 배열을 선언하여 설정하도록 합니다

3. 0이나 음수를 입력 받으면 게임을 종료하도록 합니다

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int main()

{

         int Lotto[6];

         int iNum;

         int i;

         int j;

         int k;

         long seed;

        

         printf ("*** LOTTO NUMBER GENERATOR ***\n");

         while(1)

         {

                  printf ("Enter the game count : ");

                  scanf ("%d", &iNum);

 

                  if(iNum <= 0) break;                           // 입렵된 정수가 0이거나 음수면 프로그램 종료

                  printf ("=============================\n");

                  seed = time (NULL);                          // seed는 시간을 넣음

                  srand (seed);                                   // rand함수 seed값 설정

                  k = 0;

 

                  for (iNum; 0 < iNum; --iNum)

                  {

                           k++;

                           printf ("Game  %2d : ", k);

                           for (i = 0; 6 > i; ++i)

                           {

                                   Lotto[i] = rand() % 45 + 1;               // 45이하의 난수생성

                                   for (j = 0; i > j; ++j)

                                   {

                                            if (Lotto[j] == Lotto[i])           // 같은 숫자일시 난수생성

                                            {

                                                     Lotto[i] = rand() % 45 + 1;

                                                     j = -1;                        //j++하게되어 0부터다시 생성됩니다

                                            }

                                   }

                                   printf ("%2d ", Lotto[i]);

                           }

                           printf ("\n");

                  }

                  printf ("=============================\n");

                  printf ("\n");

         }

         return 0;

}

 


요약하자면 이렇습니다
for (i = 0; 6 > i; ++i)에서 Lotto[i]에 값을 난수로 넣어 주고 그다음 for (j = 0; i > j; ++j)에서 i=j가 같은 값이 있는지 검사를 합니다 그래서 있게되면 다시 돌리게되어 같은수가 나오지 않게 됩니다

쉽게말해 Lotto[]라는 열에

Lotto[i] = 1 42 42 25 26 26

i = 0    j = 0

i = 1    j = 0 1        1

i = 2    j = 0 1 2      1 42

i = 3    j = 0 1 2 3    1 42 42 같은 숫자 발생 0으로 초기화 하고 다시 난수 발생
.....

i 3에는 42가 들어 있는데 j 2에서 42가 대입되어 
같은수가 발견 되어 초기화 하게 됩니다  

추가로
1. 보너스 숫자 생성
2. 입력되는 정수의 오름 및 내림차순 정리 등을 추가 하면 좀더 완성도 있는 프로그램이 될듯 합니다

Posted by mantwo