**본 프로그램은 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++을 조금 배우면 누구나 만들 수 있을 것이다.
다음엔 더 어려운 프로그램을 만드는 것을 도전해 봐야겠다.
'Try Programs' 카테고리의 다른 글
원하는 개수의 정수들의 최소공배수 구하기(JAVA) (0) | 2019.02.16 |
---|---|
원하는 개수의 정수들의 최대공약수 출력 (JAVA) (0) | 2019.02.15 |
솔플 테트리스 만들기 2 (0) | 2019.01.31 |
솔플 테트리스를 만들어보자 1 (0) | 2019.01.29 |
똥 피하기 (간단한 콘솔게임) (코드 저장겸 포스팅) (0) | 2019.01.23 |