본문 바로가기

Try Programs

로또 번호 추첨기 (약 5년 기간의 확률통계 이용)


**본 프로그램은 https://www.dhlottery.co.kr (로또홈페이지)에서의 통계를 이용하여 만들어졌습니다.

**정확한 확률을 가지고 만들어진 것은 아니니 이 점 참고해 주시기 바랍니다.


이 프로그램에 알고리즘이라고 할 만큼 대단한 것은 없다. 그만큼 간단한 프로그램이다.


코드 알고리즘

1. 1~45까지 각 번호마다 확률을 부여한다.

2. 확률에 따라 나오는 번호들을 6개 출력한다. (중복X)


여기서 확률을 만들어야 하기 때문에 rand() 함수와 실행할 때마다 결과가 달라져야 하므로

srand(time(NULL)) 함수를 써야 할 것이다.


그리고 그 확률을 각 숫자별로 부여해주는 함수도 만들어보았다.


(이건 실행화면 예시)




우선 랜덤함수를 이용한 확률발생함수이다.


1
2
3
4
5
6
7
#define MAXNUM 906
////////각 번호별 확률 생성 함수//////////
int NumProbably() 
{
    int randnum = rand() % MAXNUM + 1;
    return randnum;
}
cs


참고로 이 프로그램에서 사용하는 통계는 로또회차 대략 250차 정도의 통계를 이용한 것이다.

그래서 그 회차 동안 나온 숫자 갯수가 총 906개라 MAXNUM을 906으로 정의한 것이다.



다음으로는 숫자별로 확률을 정의한 함수이다.

(말이 확률 정의지 그냥 노가다나 별거없다)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//////확률의 값과 매치시켜 결과값(1~45 숫자)을 반환하는 함수/////
int lotterynum(int r)
{
    int result = 0;
    
    if (r >= 1 && r <= 19)                    
        result = 1;
    else if (r >= 20 && r <= 42)            
        result = 2;
    else if (r >= 43 && r <= 64)            
        result = 3;
    else if (r >= 65 && r <= 82)            
        result = 4;
    else if (r >= 83 && r <= 100)
        result = 5;
    else if (r >= 101 && r <= 122)
        result = 6;
    else if (r >= 123 && r <= 141)
        result = 7;
    else if (r >= 142 && r <= 158)
        result = 8;
    else if (r >= 159 && r <= 175)
        result = 9;
    else if (r >= 176 && r <= 204)
        result = 10;
    else if (r >= 205 && r <= 232)
        result = 11;
    else if (r >= 233 && r <= 263)
        result = 12;
    else if (r >= 264 && r <= 285)
        result = 13;
    else if (r >= 286 && r <= 305)
        result = 14;
    else if (r >= 306 && r <= 325)
        result = 15;
    else if (r >= 326 && r <= 347)
        result = 16;
    else if (r >= 348 && r <= 365)
        result = 17;
    else if (r >= 366 && r <= 389)
        result = 18;
    else if (r >= 390 && r <= 414)
        result = 19;
    else if (r >= 415 && r <= 425)
        result = 20;
    else if (r >= 426 && r <= 453)
        result = 21;
    else if (r >= 454 && r <= 463)
        result = 22;
    else if (r >= 464 && r <= 476)
        result = 23;
    else if (r >= 477 && r <= 498)
        result = 24;
    else if (r >= 499 && r <= 512)
        result = 25;
    else if (r >= 513 && r <= 528)
        result = 26;
    else if (r >= 529 && r <= 543)
        result = 27;
    else if (r >= 544 && r <= 566)
        result = 28;
    else if (r >= 567 && r <= 584)
        result = 29;
    else if (r >= 585 && r <= 606)
        result = 30;
    else if (r >= 607 && r <= 627)
        result = 31;
    else if (r >= 628 && r <= 640)
        result = 32;
    else if (r >= 641 && r <= 668)
        result = 33;
    else if (r >= 669 && r <= 693)
        result = 34;
    else if (r >= 694 && r <= 709)
        result = 35;
    else if (r >= 710 && r <= 732)
        result = 36;
    else if (r >= 733 && r <= 747)
        result = 37;
    else if (r >= 748 && r <= 768)
        result = 38;
    else if (r >= 769 && r <= 787)
        result = 39;
    else if (r >= 788 && r <= 798)
        result = 40;
    else if (r >= 799 && r <= 819)
        result = 41;
    else if (r >= 820 && r <= 840)
        result = 42;
    else if (r >= 841 && r <= 864)
        result = 43;
    else if (r >= 865 && r <= 881)
        result = 44;
    else
        result = 45;
 
    return result;
 
}
cs


그저 일일이 통계치를 각 숫자에 넣은 것 뿐이다.



그리고 메인함수


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <math.h>
#include <time.h>
#pragma warning(disable: 4996)
//본 통계는 로또회차 250회 (대략 5년 정도간) 정도의 결과값을 가지고 만들어본 확률입니다.
 
int main()
{
    srand(time(NULL));                            //시드값(시간에 따라 값이 변경)을 설정, main함수에 srand(time(NULL)); 호출
    int a[6= { 0 };
    int i, j, k, prob = 0;
    char restart = 0;
 
    while (restart != 'n')
    {
        for (i = 0; i < 6; i++)
        {
            prob = NumProbably();                //prob : 확률값
            a[i] = lotterynum(prob);            //배열에 1~45까지의 숫자 넣기
 
            for (j = 0; j < i; j++)                //중복 방지: 배열에서 이전의 숫자와 중복이 있으면 i값을 --
            {
                if (a[i] == a[j])
                    i--;
            }
        }
        printf("----------------------------------------------------\n");
        printf("추천 로또 번호는\n\n");
        for (k = 0; k < 6; k++)
        {
            if (k < 5)
                printf("%d, ", a[k]);
            else
                printf("%d \n", a[k]);            //마지막 숫자를 출력하고 줄바꿈
        }
        printf("----------------------------------------------------\n\n");
        fflush(stdin);                            //입력 버퍼 초기화
        printf("또 다른 번호를 받겠습니까? (y/n) : ");
        scanf("%c"&restart);
    } 
    return 0;
}
cs


재미삼아 만들어 봤는데 비교적 간단한 코딩이라 C/C++을 조금 배우면 누구나 만들 수 있을 것이다.

다음엔 더 어려운 프로그램을 만드는 것을 도전해 봐야겠다.




LotteryNumber.exe