ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로또(Lotto) 프로그램
    언어/C, C++ 2020. 8. 20. 12:50

    프로그램 설명
     -> 로또 프로그램이다.
     -> 실제와 유사하게 1부터 45까지의 숫자 중 6개를 랜덤으로 뽑아 당첨 번호를 만든다.
     -> 자동의 경우 랜덤으로 6개의 숫자를 랜덤으로 뽑아내어 당첨 번호와 비교해서 맞춘 갯수를 확인할 수 있다.
     -> 수동의 경우 1부터 45까지의 숫자를 입력받아 당첨 번호와 비교해서 맞춘 갯수를 확인할 수 있다.
     -> 단, 수동일 때 입력받은 숫자가 1부터 45까지 범위의 숫자가 아닐 경우 에러를 띄운 후 재입력 받아낸다.
     -> 따로 기능을 넣어 둔 확인 모드에서는 컴퓨터가 뽑아낸 로또 당첨 번호만 출력한다.
     -> 로또 번호를 출력할 시에 사용자가 보기 편하도록 선택 정렬을 통해 번호를 출력한다.

     

     

    프로그램 조작 방법
     -> 숫자 1 입력 시 자동 모드로 진입한다.
     -> 자동 모드에서는 컴퓨터가 뽑아낸 당첨 번호와 로또 번호를 비교하여 결과를 확인할 수 있다.
     
     -> 숫자 2 입력시 수동 모드로 진입한다.
     -> 수동 모드에서는 엔터를 통해 숫자를 입력할 수 있으며 총 6개의 숫자를 입력해야 한다.
     -> 1부터 45까지의 숫자를 입력 가능하며 범위를 벗어날 시 재입력 해야한다.

     -> 숫자 3 입력시 출력 모드로 진입한다.
     -> 사용자의 숫자 입력은 지원하지 않으며 컴퓨터가 뽑아낸 당첨 번호만 출력하고 프로그램을 종료한다.

     

     

    소스코드

     -> 랜덤 부분 (random으로 사용)

    #include <random>
    
    int PopNumber()
    {
    	int temp = 0;
    	random_device rd;
    	mt19937_64 mt(rd());
    
    	uniform_int_distribution<int> range(1, 45);
    	temp = range(mt);
    
    	if (numArray[temp - 1] != NULL)
    	{
    		numArray[temp - 1] = NULL;
    		return temp;
    	}
    	else
    		return PopNumber();
    }

     

      -> 랜덤 부분 (srand으로 사용)

    #include <time.h>
    
    int PopNumber()
    {
    	int temp = rand() % 45 + 1;
    
    	if (numArray[temp - 1] != NULL)
    	{
    		numArray[temp - 1] = NULL;
    		return temp;
    	}
    	else
    		return PopNumber();
    }
    
    
    int main()
    {
    	time_t t = time(NULL);
    	srand((unsigned int)time(NULL));
    
    	···
    }

     

      -> 로또 전체 번호 생성

    static int numArray[45];
    
    void MakeNumber()
    {
    	for (int i = 0; i < 45; i++)
    		numArray[i] = i + 1;
    }

     

      -> 숫자 정렬을 위한 선택 정렬

    void SelectSort(int *lotto)
    {
    	int min;
    
    	for (int i = 0; i < 5; i++)
    	{
    		min = i;
    
    		for (int j = i + 1; j < 6; j++)
    			if (lotto[min] > lotto[j])
    				min = j;
    
    		SwapFunc(lotto[min], lotto[i]);
    	}
    }
    
    void SwapFunc(int &num, int &sum)
    {
    	int temp;
    	temp = num;
    	num = sum;
    	sum = temp;
    }

     

      -> 같은 수가 몇개 인지 판별 함수

    int MatchNumber(int *lotto, int *number)
    {
    	int count = 0;
    
    	for (int i = 0; i < 6; i++)
    		for (int j = 0; j < 6; j++)
    			if (number[i] == lotto[j])
    				count++;
    
    	return count;
    }

     

      -> 로또 배열을 보여주는 함수

    void ShowNumber(int *lotto)
    {
    	for (int i = 0; i < 6; i++)
    		printf("%d ", lotto[i]);
    
    	printf("\n");
    }

     

     

     -> 메인 함수

    int main()
    {
    	···
        
    	int lotto[6];
    	MakeNumber();
    
    	for (int i = 0; i < 6; i++)
    		lotto[i] = PopNumber();
    	
    	SelectSort(lotto);
    
    	int choiceMode = 0;
    	printf("----Lotto Game----\n");
    	printf("-Select Game Menu-\n");
    	printf("-1. Auto Number  -\n");
    	printf("-2. Select Number-\n");
    	printf("-3. View Number  -\n");
    	printf("-> Choice Num : ");
    	scanf_s("%d", &choiceMode);
    
    	switch (choiceMode)
    	{
    	case 1:
    		int autoLotto[6];
    		MakeNumber();
    
    		for (int i = 0; i < 6; i++)
    			autoLotto[i] = PopNumber();
    
    		SelectSort(autoLotto);
    
    		printf("Match Count : %d \n", MatchNumber(lotto, autoLotto));
    		printf("Auto Number : ");
    		ShowNumber(autoLotto);
    		break;
    	case 2:
    		int choiceLotto[6];
    
    		for (int i = 0; i < 6; i)
    		{
    			int pressNum = 0;
    			printf("Press 0 Up and 46 Under Number : ");
    			scanf_s("%d", &pressNum);
    
    			if (pressNum > 45 || pressNum < 1)
    				printf("Error \n");
    			else
    				choiceLotto[i++] = pressNum;
    		}
    
    		SelectSort(choiceLotto);
    		printf("Match Count : %d \n", MatchNumber(lotto, choiceLotto));
    		printf("Choice Number : ");
    		ShowNumber(choiceLotto);
    		break;
    	case 3:
    		printf("Only Show Lotto Number \n");
    		break;
    	}
    
    	printf("Lotto Number : ");
    	ShowNumber(lotto);
    
    	system("pause");
    
    	return 0;
    }

    '언어 > C, C++' 카테고리의 다른 글

    연결 리스트 스택 (Linked List Stack)  (0) 2021.01.13
    배열 스택 (Array Stack)  (0) 2021.01.12
    이중 연결 리스트 (DoubleLinkedList)  (0) 2021.01.05
    연결 리스트 (Linked List)  (0) 2020.12.31
    배열 리스트 (Array List)  (0) 2020.12.29

    댓글