brunch

C++ 로또 번호 생성기

부자 되자!

by Moai

로또에 당첨되기 위해선 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



keyword
매거진의 이전글C++ while문