brunch

You can make anything
by writing

C.S.Lewis

by Moai Sep 19. 2020

C++ 로또 번호 생성기

부자 되자!

로또에 당첨되기 위해선 1부터 45의 수에서 내가 뽑은 6개의 숫자와 기계가 뽑은 6개의 숫자 중 3개 이상이 맞으면 된다. 6개의 모든 수가 맞으면 1등이 되고 엄청난 돈을 받아 부자가 된다.

5개를 맞추면 2등이어야 하는데 3등이다. 왜 일까? 운은 있지만 운이 없는? 5개를 맞춘 사람을 위해 한번 더 기회를 주기 때문이다. 한개의 보너스 수를 더 뽑고 앞에서 맞춘 5개의 수와 보너스 숫자까지 맞추면 2등을 시켜준다. 사실 이것도 6개 맞추긴한건데... 뭔가 억울하다.


앞에서 배운 내용을 복습하라 겸 로또 번호를 생성해주는 프로그램을 만들어보자. 랜덤하게 수를 뽑을 건데 중복으로 같은 수를 뽑는 것을 방지하기 위해 메모이제이션 기법이라는 것을 이용해볼 것이다.



실행 결과는 위와 같고 코드는 아래와 같다.


#include <iostream>

#include <random>

using namespace std;


int getRandomNumber (int min, int max) {

    // 씨드 설정

    random_device rd;

    mt19937 seed(rd());

    //분포 설정

    uniform_int_distribution<int> range(min, max);

    //랜덤 값 생성

    return range(seed);

}


int main()

{

    const int MIN = 1;

    const int MAX = 45;

    int arr[MAX+1];

    int pickedBall;

    // 초기화 작업 - 메모이제이션

    for (int i=MIN; i<=MAX; i=i+1) {

        arr[i] = 0;

    }    

    // 총 7개의 수를 뽑음

    for (int i=1; i<=7; i++) {

        while(true) {

            pickedBall = getRandomNumber(MIN, MAX);

            if (arr[pickedBall]==0) { // 이전에 뽑았는지 확인

                break; // 뽑은 적이 없다면 OK

            }

        }

        if (i==7) {

            cout << " (BONUS: " << pickedBall << ")" << endl;

        } else {

            arr[pickedBall] = 1; // 뽑았다고 표시

            cout << pickedBall << " ";

        }

    }    

    return 0;

}


여기에 들어가면 언제든지 위의 코드를 실행해 볼 수 있으니 필요하면 여기에 들어가서 로또 번호를 생성해서 부자가 되어보자.


https://onlinegdb.com/H1mPCIfrv 



매거진의 이전글 C++ while문
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari