Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

C언어 [로또번호 생성기 & 중복제거] 본문

프로그래밍/C

C언어 [로또번호 생성기 & 중복제거]

프로앱등이 2020. 5. 3. 19:31

로또 번호 생성기

로또 번호 생성에는 2가지의 알고리즘이 들어가야 한다 또한 숫자의 범위는 1~45까지 밖에 없다!

1. 중복제거 알고리즘

2. 오름차순 정렬 알고리즘

이 두 알고리즘과 rand 함수를 이용하여 로또 번호 생성기를 만들어보자.

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
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
 
int overlap(int *lotto); //중복제거 함수
int sort(int *lotto); //정렬 함수 
int print(int *lotto);
 
int main()
{
    srand(time(NULL)); // 매번 다른 시드값 생성 
     int lotto[6]; // 정수형 변수 선언 
        
    overlap(lotto);
    sort(lotto);
    print(lotto); 
 
    return 0;
}
    //중복제거 함수 
    int overlap(int* lotto)
    {
        int i,j,save;
        for(i=0;i<5;i++)
        {
            while(1)
            {
                lotto[i] = rand() % 45 + 1;
                save=0//스위치 변수 
                for(j=0;j<i;j++)
                {
                    if(lotto[i] == lotto[j]) // 중복값 확인 
                    {
                        save = 1
                        break//중복값 확인시 for문 종료 
                    }
                }
                if(save==0)
                {
                    break//스위치가 0이면 중복 X while문 종료 
                }
             }
        }
        return 0
    }
 
    //정렬 함수 
    int sort(int *lotto)
    {
        int tmp,i,j;
        tmp=0;
        for(i=0;i<3;i++// 2 / n(n-1)회전 
        {
            for(j=0;j<4;j++)
            {
                   if(lotto[j] > lotto[j+1]) //오름차순 정렬시 [j] > [j+1] 클 경우 자리교환 
                   {
                      tmp = lotto[j];
                      lotto[j] = lotto[j+1];
                   lotto[j+1= tmp;
                }
            }
        }
        return 0;
    }
    //출력함수 
    int print(int *lotto)
    {
        int k;
        for(k=0;k<5;k++)
        {
            printf("[%d]",lotto[k]);
        }
        return 0;
    }
 
출력결과 : [9][14][24][34][42]
 
 

코드가 간결하진 않지만 나름대로 한번 짜보았다..

함수를 정의하여 출력함수,정렬함수,중복제거함수 총 3가지의 사용자 정의 함수를 만들고 각 함수 에서 해당 로직이

진행되게 하였다 로직 설명은 주석을 참조하자.

중복제거 함수

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
int overlap(int* lotto)
    {
        int i,j,save;
        for(i=0;i<5;i++)
        {
            while(1)
            {
                lotto[i] = ((rand() % 45+ 1);
                save=0//스위치 변수 
                for(j=0;j<i;j++)
                {
                    if(lotto[i] == lotto[j]) // 중복값 확인 
                    {
                        save = 1
                        break//중복값 확인시 for문 종료 
                    }
                }
                if(save==0)
                {
                    break//스위치가 0이면 중복 X while문 종료 
                }
             }
        }
        return 0
    }
 
 

기회가 된다면 내가 만든 로또 추출기로 로또를 사봐야겠다.. 그렇다면 재밌는 IT공부를 안해도되니까 ^.^