작성
·
269
0
겹치는 숫자가 없게하기위해서 알려주신대로 shuffle과 swap을 이용했는데요, 같은 숫자가 나타나는 원인이 무엇일까요?
#include <iostream>
#include<time.h>
int main()
{
using namespace std;
//로또만들기
//45개 수를 배열해놓고 6개랑 추가 숫자 1개를 가져다가 써야한다.
//1~45까지의 '겹치지 않는' 수를 이용하기위해서는 조합의 개념으로 임의로 배열되어 잇는 상황에서 6개를 뽑는게 좋다.
//일단45개를 배열해놓고 인덱스를 swap하면 이걸 반복하면 임의로 섞이면서 shuffle이 이루어진다.
int iLotto[45] = {};
for (int i = 0; i < 45; ++i)
{
iLotto[i] = i + 1;
}
//타임에 시드값을 주자
srand(unsigned int(time(0)));
//마음대로 뽑을 인덱스가 필요하다
int iTemp, iIndex1, iIndex2;
//이제 iLotto의 값을 섞어보자
for (int i = 0; i < 100; ++i)
{
iIndex1 = rand() % 45;
iIndex2 = rand() % 45;
iTemp = iIndex1;
iLotto[iTemp] = iLotto[iIndex1];
iLotto[iIndex1] = iLotto[iIndex2];
iLotto[iIndex2] = iLotto[iTemp];
}
//이제 6개 숫자와 추가숫자 1개를 뽑아보자
for (int i = 0; i < 6; ++i)
{
cout << iLotto[i] <<"\t";
}
cout << "추가숫자:\t" << iLotto[7];
답변