본문 바로가기
Programming/기타

[C] rand()를 이용한 로또

by Bam_t 2021. 2. 23.
728x90

 

지난 포스트에서 사용한 rand를 이용한 랜덤 프로그램을 만들어보았습니다.

그래서 이번에는 이를 이용해 로또추첨 프로그램을 소개하겠습니다.

개인적으로 로또 프로그램은 초기에 접하는 문제이면서 함수의 사용, 제어구문의 사용이 적절히 녹아든 좋은 문제라고 생각됩니다.

 

숫자는 총7개이고 1~45의 숫자를 이용합니다.

이 프로그램에서 중요한 부분은 rand()의 활용과 로또에선 중복되는 숫자가 나올 수 없으므로 중복을 제거하는 것입니다.

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


void main() {
	int lottery[7];	//추첨된 숫자를 저장할 배열

	srand((unsigned int)time(NULL));

	for (int i = 0; i < 7; i++) {
		lottery[i] = rand() % 45 + 1;  //1부터 45까지 숫자를 이용하기 위함. +1을 안할 경우 0~44의 숫자범위가 설정됩니다. 

		for (int j = 0; j < i; j++) {  //로또에서 중복은 없으므로 중복 제거를 위한 포문
			if (lottery[i] == lottery[j]) {
				i--;  //중복이 발견될 경우 i번째 숫자를 다시 뽑는다.
				break;
			}
		}
	}

	for (int k = 0; k < 7; k++) { //출력용
		printf("%d ", lottery[k]);
	}
	printf("\n");
}

srand((unsigned int)time(NULL));

실행될때마다 무작위 시드값을 랜덤으로 주게됩니다. 이 시드값이 시작할때마다 무작위로 변함으로써 실행될때마다 다른 결과를 가져오게 됩니다.

 

 

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

로또배열 i번 인덱스에 로또 숫자 값을 저장합니다. %연산자로 0~44의 값을 얻고 1을 더해 로또값의 범위인 1~45사이의 숫자중 하나를 저장하게됩니다.

 

 

 

for (int j = 0; j < i; j++) {  //로또에서 중복은 없으므로 중복 제거를 위한 포문
			if (lottery[i] == lottery[j]) {
				i--;  //중복이 발견될 경우 i번째 숫자를 다시 뽑는다.
				break;
			}
		}

로또배열에서 중복을 검사해주는 구문입니다. 카운터 변수 j는 로또 배열의 처음부터 현재 인덱스 전까지 반복합니다. 반복문 내부에서는 현재 인덱스의 로또 숫자 값과 로또 배열의 이전 값들을 하나씩 비교합니다.

같은 숫자가 있을경우 로또 배열의 인덱스 카운터 변수 i를 하나 빼주어 현재 인덱스의 번호를 추첨하는 작업을 다시 하도록 만들어줍니다.


1회 실행
2회 실행
3회 실행

중복없이 7개의 숫자를 추출하는 로또 프로그램의 완성입니다.

728x90

댓글