본문 바로가기

IT 전자

C언어 추첨 프로그램 소스 공개

C언어 추첨 프로그램 소스 공개


C언어를 사용하여 추첨 프로그램을 작성하였다. 필자가 카페에 나눔을 하게 되어 추첨이 필요한 상황에 놓였었다. 


세상에 여러가지 추첨 프로그램이 널려있지만, 그냥 내손으로 만드는 것이 행복하기에 아주 간단하게 콘솔 모드에서 작성되도록 C언어로 추첨 프로그램을 작성했다.


이 추첨 프로그램은 72명 중 10명을 랜덤으로 뽑는 것이다. 10명을 뽑을 경우 중복이 될 수도 있는데 중복 방지는 어떻게 처리할까?



중복 방지 알고리즘을 생각해보자! 


랜덤으로 선택한 것이 뽑아놓은 목록 중에 중복이 있는지 살펴보고 만약에 있다면 다시 랜덤으로 뽑아서 이미 뽑아놓은 목록과 중복이 있는지 다시 비교해보면 된다. 만약 중복이 없다면 확정이고 중복이라면 다시 뽑아서 기존에 뽑아놓은 자료와 비교를 하면 된다. 


// 추첨 프로그램 소스 코드

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <windows.h>

#define MAX 72

#define NUM 10


int main() {

int candidateList[NUM];

char nameList[MAX][100] = {

"날아라빵빵",

"히비스커스",

"윰블",

"샤메161013",

"jungi23",

"케미칼",

"가을바람",

"쮸쮸맘",

"illailla",

"심플심플라이프",

"woojin1042",

"마주봄",

"날아라호잇",

"지니얌",

"dodo",

"키토조아",

"쮸v",

"큼큼큼",

"나도날씐이되고파",

"수지",

"붉은사슴",

"진이친구",

"Ashley",

"사랑스런너",

"케이키",

"샹해",

"문달달",

"구마구마2",

"예지0예성맘",

"사이다옷161003",

"lee1555",

"쮸니",

"san",

"전주|전라도훈녀",

"weed80",

"혜돌",

"써니얌",

"포뇨 161003",

"초록향기12",

"leaflet90",

"아줌니",

"nov10th",

"systyle",

"rameebaby",

"레이디그레이161001",

"고슴도치인형",

"지렁이냠냥",

"플레첼",

"할리퀸Queen",

"키토지",

"네이로니",

"욜라뿅뿅2",

"개융",

"드롱이",

"야한분홍",

"앙꼬둥둥",

"긔서",

"바람타고실실",

"푸른하늘V",

"맑은소리",

"리엘르아네",

"멋진녀어석",

"phoonwl1",

"김보람08",

"언내",

"롱롱롱",

"오십",

"드디어7",

"아띠콩",

"해피LCHF",

"둥둥윤",

"ㅇㅂㅠ",

};


srand((unsigned)time(NULL));


// 10명을 랜덤 추첨으로 선택

for (int i = 0; i < NUM; i++) {

int idx = 0;

int number = rand() % MAX;


// 중복이 없을 때까지 랜덤 추첨

while (idx < i) {

if (candidateList[idx++] == number) {

number = rand() % MAX; // 랜덤 추첨

idx = 0;

continue;

}

}

candidateList[i] = number;

}


printf("린트90 초콜렛 누가 받아갈까요?\n\n");

for (int i = 0; i < NUM; i++) {

Sleep(2000); // 시간 2초 지연

printf("%d순위\t%s\n", i+1, nameList[candidateList[i]]);

if (i == 4) {

printf("\n***** 5명 축하합니다. *****\n\n");

Sleep(2000);

printf("양도하시는 분이나 연락이 안되는 분이 \n있을지 모르니 추가로 5명 더 뽑겠습니다.\n\n");

}

}


printf("\n- 선정된 10분들은 Zen에게 쪽지로 주소, 이름, 연락처를 주세요.\n");

printf("- 2017년 2월 12일 24:00까지 쪽지로 보내주세요.\n");

printf("- 양도하시는 분이나 연락 안되시는 분들이 생기면\n");

printf("- 6순위부터 차례대로 보내드리겠습니다.\n\n");

return 0;

} // 소스 코드 끝.... 


추첨 프로그램 중 핵심적인 소스 코드는 약 10줄 정도 밖에 안된다. 덧붙여 설명하자면 10명을 뽑고 중복이 되면 다시 뽑아서 이전에 뽑은 목록과 비교하면 된다. 그걸 계속 반복하는 것이다. 


// 10명을 랜덤 추첨으로 선택
for (int i = 0; i < NUM; i++) {
int idx = 0;
int number = rand() % MAX; // 처음에 랜덤하게 뽑는다. 

// 중복이 없을 때까지 랜덤 추첨
while (idx < i) {
if (candidateList[idx++] == number) { // 뽑아둔 목록과 비교, 같으면 
number = rand() % MAX; // 랜덤 추첨
idx = 0; // 초기화, 처음부터 다시 뽑아둔 목록과 비교하기 위해
continue;
}
}
candidateList[i] = number; // 랜덤 결과가 중복이 없을 경우 목록에 저장
}


위 코드가 추천 프로그램 소스의 핵심이다. 이 부분만 잘 이해하면 된다. 이상 C언어로 작성된 추첨 프로그램을 살펴보았다. 



위 코드를 이용한 결과를 동영상에 담았다. 


사업자 정보 표시
사업자 등록번호 : -- | TEL : --