ABOUT ME

포소니는 나의 하루이자 누군가의 공감입니다. 조용히 머물러도 좋고, 가볍게 이야기를 남겨도 좋아요. 당신의 일상도, 이곳에 스며들길 바랍니다.

Today
Yesterday
Total
  • 로또 함수화
    카테고리 없음 2013. 2. 20. 01:50
    반응형

    /-
    로또 6개의 숫자와 보너스 숫자를 뽑아서
    수동 또는 자동으로 입력된 숫자 6개와 같은지를 검색해서
    모두 같으면 1등 
    5개가 같고 보너스와 나머지 1개가 일치하면 2등으로 처리 
    나머지는 꽝..
    단/ 중복수는 처리되지 않게
    1/2 , 1/3 , 1/4, 1/5, 1/6
    2/3,  2/4, 2/5, 2/6
    3/4,  3/5 , 3/6
    4/5, 4/6
    5/6
    *-
    #include <iostream>
    #include <ctime> //< time.h
    #include <windows.h>
    using namespace std;
    //< 메뉴 출력 
    void OutputMenu( void );
    //< 선택 입력 
    int InputSelect( void );
    //< 범위 검사
    bool CheckScopeNumber( int nCheckNumber , int nMinNumber, int nMaxNumber );
    //< 중복 체크
    bool CheckDuplication( int* pArray, int nArraySize );
    //< 당첨 확인
    int CheckJackpot( int* pUserArray, int nUserArraySize, 
    int* pComArray, int nComArraySize );
    //< 섞기
    void Shuffle( int* pLottoArray, int nLottoArraySize );
    //< 바꾸기
    void Swap( int* pDest, int* pSrc );
    //< 당첨 개수 확인 
    int LottoEqualNumberCount( int* pUserArray, int nUserArraySize, 
      int* pComArray, int nComArraySize );
    //< 수동 번호 입력
    bool UserSelectNumber( int* pUserArray, int nUserArraySize );
    //< 자동 번호 입력
    bool UserAutoSelectNumber( int* pUserArray, int nUserArraySize );
    int main(void)
    {
    //< 변수 선언 
    //< comNumber, UserNumber , 숫자 입력 여부(bool)
    int nUser[6];
    int nCom[45];
    //< 랜덤 시드 설정 
    srand((unsigned int)time(0));
    for( int i = 0 ; i < 45 ; i++ )
    {
    nCom[i] = i + 1;
    }
    //< 반복
    while( true )
    {
    Shuffle( nCom , 45 );
    system("cls");
    int nSelectMenuNumber = -1;
    //< 메뉴 출력 
    OutputMenu();
    //< 유저 선택 입력
    nSelectMenuNumber = InputSelect();
    //< 메뉴에 따른 처리 
    if( nSelectMenuNumber == 0 )
    {
    cout <<"꺼져!!"<<endl;
    break;
    }
    switch( nSelectMenuNumber )
    {
    //< 유저 숫자 입력
    case 1: //< 수동 입력
    {
    //< 수동뽑기
    UserSelectNumber( nUser, 6 );
    //< 당첨 확인
    CheckJackpot( nUser, 6, nCom, 7);
    }
    break;
    case 2: //< 자동 입력
    {
    //< 자동
    UserAutoSelectNumber( nUser, 6);
    //< 당첨확인
    CheckJackpot( nUser, 6, nCom, 7 );
    }
    }
    cout << endl;
    Sleep( 200 );
    }
    return 0;
    }
    //< 메뉴 출력 
    void OutputMenu( void )
    {
    //< 메뉴 출력 
    cout <<"1: 수동입력" << endl;
    cout <<"2: 자동입력" << endl;
    cout <<"0: 종료" << endl;
    cout <<"선택:";
    }
    //< 선택 입력 
    int InputSelect( void )
    {
    int nInput;
    cin >> nInput;
    return nInput;
    }
    //< 범위 검사
    bool CheckScopeNumber( int nCheckNumber , int nMinNumber, int nMaxNumber )
    {
    //< 두수확인 ( 작은수와 큰수가 바꼈는지 확인 )
    if( nMaxNumber < nMinNumber )
    {
    //< 바꼇으면 다시 바꾸기 
    Swap(&nMinNumber,&nMaxNumber);
    }
    //< 범위 체크
    if( nMinNumber <= nCheckNumber && nCheckNumber <= nMaxNumber )
    {
    return true;
    }
    return false;
    }
    //< 중복 체크
    bool CheckDuplication( int* pArray, int nArraySize )
    {
    //< 널포인터 인지 체크
    if( pArray == NULL )
    {
    return false;
    }
    //< 중복 체크
    for( int i = 0 ; i < nArraySize ; i++ )
    {
    for( int j = 0 ; j < nArraySize ; j++ )
    {
    //< 같은 인덱스 처리 안하기
    if( i == j )
    {
    continue;
    }
    //< 중복
    if( pArray[i] == pArray[j] )
    {
    return true;
    }
    }
    }
    //< 결과 반환
    return false;
    }
    //< 당첨 확인 1/ 2/ 0
    int CheckJackpot( int* pUserArray, int nUserArraySize, 
     int* pComArray, int nComArraySize )
    {
    //< 포인터 확인 (유저와 컴)
    if( pUserArray == NULL || pComArray == NULL )
    {
    return false;
    }
    cout <<"당첨 번호 : ";
    for( int i = 0 ; i < nComArraySize ; i++ )
    {
    if( i != 6 )
    {
    cout << pComArray[i] << " , ";
    }
    else
    {
    cout <<"\t보너스번호 : " << pComArray[i] <<endl;
    }
    Sleep(100);
    }
    //< 당첨개수 확인
    int nEqualCount = LottoEqualNumberCount( pUserArray, nUserArraySize ,
    pComArray, nComArraySize );
    //< 등수 판별
    switch( nEqualCount )
    {
    case 6:
    {
    cout <<"1등" << endl;
    Sleep(500);
    return 1;
    }
    break;
    case 5:
    {
    bool bBonus = false;
    //< 보너스 확인
    for( int i = 0 ; i < nUserArraySize ; i++ )
    {
    if( pUserArray[i] == pComArray[nComArraySize-1]) 
    {
    //< 플래그 처리 
    bBonus = true;
    break;
    }
    }
    if( bBonus == true )
    {
    cout <<"2등" << endl;
    Sleep(500);
    return 2;
    }
    else
    {
    cout <<"3등" << endl;
    Sleep(500);
    return 3;
    }
    }
    break;
    }
    return 0;
    }
    //< 섞기
    void Shuffle( int* pLottoArray, int nLottoArraySize )
    {
    //< 포인터 화인
    if( pLottoArray == NULL )
    {
    return;
    }
    //< 지정된 횟수만큼 섞기
    for( int i = 0 ; i < 100 ; i++ )
    {
    int nDest = rand()%nLottoArraySize;
    int nSrc = rand()%nLottoArraySize;
    //< 바꾸기
    Swap( &pLottoArray[nDest] , &pLottoArray[nSrc] );
    }
    }
    //< 바꾸기
    void Swap( int* pDest, int* pSrc )
    {
    //< 포인터 확인
    if( pDest == NULL || pSrc == NULL )
    {
    return;
    }
    //< 두수 바꾸기
    int nTemp = *pDest;
    *pDest = *pSrc;
    *pSrc = nTemp;
    }
    //< 당첨 개수 확인 
    int LottoEqualNumberCount( int* pUserArray, int nUserArraySize, 
      int* pComArray, int nComArraySize )
    {
    //< 포인터 확인
    if( pUserArray == NULL || pComArray == NULL )
    {
    return 0;
    }
    //< 중복개수 확인
    int nEqualCount = 0;
    for( int i = 0 ; i < nUserArraySize ; i++ )
    {
    for( int j = 0 ; j < nUserArraySize ; j++ )
    {
    if( pUserArray[i] == pComArray[j] )
    {
    nEqualCount++;
    break;
    }
    }
    }
    //< 중복개수 반환
    return nEqualCount;
    }
    //< 수동 번호 입력
    bool UserSelectNumber( int* pUserArray, int nUserArraySize )
    {
    //< 포인터 확인
    if( pUserArray == NULL )
    {
    return false;
    }
    //< 유저선택만큼 중복없이 입력
    while( true )
    {
    for( int i = 0 ; i < nUserArraySize ; i++ )
    {
    cout << i + 1 << "번째 숫자 입력 : ";
    cin >> pUserArray[i];
    }
    bool bDuplication = CheckDuplication( pUserArray , nUserArraySize );
    if( bDuplication == false )
    {
    break;
    }
    cout <<"중복있다..다시해" << endl;
    }
    //< 결과 리턴
    return true;
    }
    //< 자동 번호 입력
    bool UserAutoSelectNumber( int* pUserArray, int nUserArraySize )
    {
    //< 포인터 확인
    if( pUserArray == NULL )
    {
    return false;
    }
    //< 유저선택만큼 중복없이 입력
    while( true )
    {
    for( int i = 0 ; i < nUserArraySize ; i++ )
    {
    pUserArray[i] = rand () % 45;
    }
    bool bDuplication = CheckDuplication( pUserArray , nUserArraySize );
    if( bDuplication == false )
    {
    break;
    }
    }
    //< 결과 리턴
    return true;
    }

    반응형
Designed by Tistory.