끄적끄적 개발공부

# 배열로 로또번호 뽑기(2)

HYuk 2021. 4. 10. 18:21
728x90

# 배열로 로또번호 뽑기 (1) (tistory.com)

 

# 배열로 로또번호 뽑기 (1)

난수를 써서 로또번호 뽑기를 하려고한다. #include #include using namespace std; void main() { srand(unsigned(time(NULL))); int iNum[6] = {}; //중복없이 랜덤값 뽑기 iNum[0] = rand() % 45 + 1; for (int..

hyukee.tistory.com

앞의 방식은 중복된 수가 나올 수 가 있다.

 

따라서 배열에 1~45를 대입한 후, 배열의 순서를 섞어서 뽑는 방법을 생각해보았다.

 

다음은 그 코드이다.

 

#include <iostream>
#include <time.h>

using namespace std;

void main()
{
	//난수 뽑기

	int iNum[45] = {};
	int iRd1 = 0, iTemp = 0;
	
	for (int i = 0; i < 45; ++i)
	{
		iNum[i] = i + 1; // 배열에 1~45 초기화
	}
	
	srand(unsigned (time(NULL)));

	for (int i = 0; i < 6; ++i) // 난수하나(0~44)의 값을 뽑고, iNum[0:5] 의 배열값을 iNum[난수]와 바꿔줌
								// 그렇게 되면 iNum[0]에 iNum[난수]의 값이 들어가고, iNum[난수]에는 iNum[0]의 값이 들어가있음
	{
		iRd1 = rand() % 45; // 난수 추출

		iTemp = iNum[i];
		iNum[i] = iNum[iRd1];
		iNum[iRd1] = iTemp;		//두 배열의 위치를 바꾸어 주는 것
	}
}

이는 전체적으로 순서를 섞어준 것은 아니다.

랜덤값을 두개 추출해서 배열의 모든 순서를 전체적으로 바꿔줄 수도 있지만,

어차피 원하는 것은 6개의 숫자이기 때문에, 이렇게 코드를 작성해도 무리는 없다.

 

위 코드는 배열중 랜덤으로 뽑은 다음에, 그 숫자를 맨 앞으로 보내주고, 또 랜덤으로 뽑은다음에 그 숫자를 두번째로 보내주고

이런 형식이다.

728x90