프로그래밍/C,C++

[C/C++] 로또 번호 셔플 예제

gameObject 2023. 6. 7. 20:30
728x90

로또번호 셔플 예제입니다.

#include <iostream> 
#include <stdlib.h> // random 헤더파일
#include <time.h> // time헤더파일
#include <unistd.h> //sleep을 위한 헤더파일

using namespace std; //namespace std선언

void shuffle();
void ShuffleOnce(int* firstNumber, int* secondNumber);

int main()
{
    setbuf(stdout, NULL); // macOS에서 sleep을 줄때 버퍼를 없애기 위함
    
    shuffle();
}

void shuffle()
{
    // {배열의 선언과 초기화
    int numbers[45] = {0,};
    for(int i = 0; i< 45; i++)
    {
        numbers[i] = i+1;
    } //배열의 선언과 초기화}

    //{배열의 출력
    printf("Shuffle 이전 \n");
    for(int i=0; i<45; i++)
    {
        printf("%d ", numbers[i]);
    }
    //배열의 출력}
    
    printf("\n\n");
    
    srand(time(NULL)); // 랜덤값을 위한 srand
    const int SHUFFLE_COUNT = 800; // 섞는횟수
    
    // {셔플 로직
    // ShuffleOnce(한번섞는 함수)를 여러번 돌려 많이 섞어주는 부분
    for(int i=0;i<SHUFFLE_COUNT;i++)
    {
        int randomIndex1 = rand() % 10;
        int randomIndex2 = rand() % 10;
        ShuffleOnce(&numbers[randomIndex1],&numbers[randomIndex2]);
    } // 셔플 로직}
    
    // {셔플 후 배열의 출력
    printf("Shuffle 이후 \n");
    for(int i=0; i<6; i++)
    {
        sleep(1);
        printf("%d ", numbers[i]);
    }
    // 셔플 후 배열의 출력}
    
    printf("\n\n");
}

// 주소값을 받아 배열을 한번 섞어주는 함수입니다.
void ShuffleOnce(int* firstNumber, int* secondNumber)
{
    int temp = -1;
    temp = *firstNumber;
    *firstNumber = *secondNumber;
    *secondNumber = temp;
}//ShuffleOnce

 

728x90