한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: Kyuseo의 게임 프로그래밍 이야기 :: http://www.soonsin.com | 트위터 @kyuseo

개요..

 

숫자를 섞어서 중복 없이 산출하는 방법 (Shuffle Number)을 소개해드립니다.

 

주로 10개의 문제를 중복 없이 뒤섞어 문제 발행을 하거나, 학생을 무작위로 재배치 하는데 사용이 되는 코드입니다.

 

 

 

 

방법

 

소스코드:

        // 1 ~ 10 까지의숫자를중복없이뒤섞어순차적으로뽑아내는방법

        IntArray m_iaShuffleQ; ///< 섞여진문제

 

        // 숫자를입력한다.

        for( int i = 0; i < 10; i++ )

            m_iaShuffleQ.Add( i+1 );

 

        // 숫자를섞는다. (내부적으로swap 으로섞는다.)

        m_iaShuffleQ.Shuffle();

 

        // 순차적으로숫자를뽑아낸다.

        for( int i = 0; i < 10; i++ )

        {            

            TRACE( " %d ", m_iaShuffleQ[i] );

        }

 

 

출력결과:

9 7 2 10 3 4 1 5 8 6

5 2 1 4 8 10 9 7 3 6

9 8 10 3 5 2 6 4 7 1

6 5 7 4 10 1 9 8 3 2

2 1 5 4 9 7 8 3 10 6

6 9 1 5 7 8 2 4 3 10

6 5 4 9 3 10 1 7 8 2

8 3 6 9 1 7 2 10 5 4

6 3 9 7 5 10 4 8 2 1

3 6 10 1 8 2 9 5 7 4

1 2 3 10 7 6 8 9 4 5

1 5 3 8 4 2 6 9 10 7

6 2 7 8 5 4 10 1 9 3

10 1 2 6 9 8 7 5 4 3

 

 

 

참고 사항

 

위 코드에서 사용한 IntArray 템플릿 클래스 및 사용한 Shuffle 함수는 다음과 같습니다.

 

template< class TYPE, class ARG_TYPE >

class CPArray : public CArray< TYPE, ARG_TYPE >

{

public:

    using CArray2< TYPE, ARG_TYPE >::GetCount;

 

    INT_PTR GetCount( ARG_TYPE t, INT_PTR nStart = 0 ) const; ///< 주어진인자의총개수를구한다.

    INT_PTR Find( ARG_TYPE t, INT_PTR nStart = 0 ) const; ///< 주어진인자의첫번째것을찾는다.

    INT_PTR Delete( ARG_TYPE t, INT_PTR nStart = 0 ); ///< 주어진인자에해당하는것을지운다. (리턴:지워진개수)

 

    TYPE& GetHead();

    const TYPE& GetHead() const;

    TYPE& GetTail();

    const TYPE& GetTail() const;

 

    TYPE RemoveHead();

    TYPE RemoveTail();

 

    void Sort( BOOL bDesc = FALSE ); ///< 정렬한다. ( 해당TYPE >, <, == 가정의되어있어야한다. )

    void Sort( int ( __cdecl *Compare )( const void *pArg1, const void *pArg2 ) ); ///< 외부함수로정렬한다.

 

    void Shuffle( int nCount = 5 ); ///< 섞는다.

 

    // 자체메모리할당된포인터전용함수

    void DeleteRemovtAt( INT_PTR nIndex, INT_PTR nCount = 1 ); ///< delete 하고RemoveAt 한다.

    void DeleteRemoveAll(); ///< delete 하고RemoveAll 한다.

 

protected:

    static int CompareAsc( const void *pArg1, const void *pArg2 );

    static int CompareDesc( const void *pArg1, const void *pArg2 );

};

 

 

 

…………………..…………….….

중략

…………………..…………….….

 

 

typedef CPArray< int, int > IntArray;

 

 

template< class TYPE, class ARG_TYPE >

inline void CPArray< TYPE, ARG_TYPE >::Shuffle( int nCount )

{

    for( INT_PTR i = 0; i < nCount; i++ )

    {

        for( INT_PTR j = 0; j < GetSize(); j++ )

        {

            Swap( m_pData[j], m_pData[ Rand( GetSize() ) ] );

        }

    }

}

 




qrcode
이 글의 QR 코드입니다.


이 저작물은 비영리, 출처:Kyuseo 프로그래밍 이야기 :: http://www.soonsin.com 표시하면 스크랩 하실 수 있습니다.

별도로 출처 표시가 되지 않은 저작물은 Kyuseo에게 저작권이 있습니다.   ★──━━ 행복한 하루 되세요 ━━──★

BLOG main image
93년부터 프로그래밍을 독학한 게임 프로그래머 kyuseo의 프로그래밍 정보와 게임 개발 강좌를 주로 다룹니다. by kyuseo

카테고리

분류 전체보기 (623)
누리게임즈 (4)
Kyuseo 소개, 잡담 (161)
만든 게임 및 프로그램 (98)
-----------★----------- (0)
개발자 팁 (65)
스마트폰 게임 개발 (47)
C++ 개발 (119)
------------------------♣ (0)
컴퓨터 활용 팁 (98)
게임, 서적, 문화 소감 (31)
------------------------♥ (0)
전체 : 2,736,274
오늘 : 23 어제 : 82