언어 자료구조 알고리즘/C언어 예제

중복되지 않게 랜덤한 카드 발생

언제나휴일 2009. 8. 19. 05:47
반응형

프로그래밍을 하다보면 중복을 하지 않으면서 랜덤을 발생해야 하는 문제들이 있다.

하나의 예로 카드를 섞어 보기로 하자.

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

 

#define MAX_CARD_TYPE    4

#define MAX_CARD_NUM    13

 

const char *ctypes[MAX_CARD_TYPE]={"♠","♥","♣","◆"};
const char *ntypes[MAX_CARD_NUM]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

 

 

int RandCard(int base[][13]);
void PrintCard(int lcnt,int ct,int cn);
void main()
{
    int arr[MAX_CARD_TYPE][MAX_CARD_NUM]={0}; 
    int lcnt = 0;
    int selected;

    srand((unsigned)time(NULL));

    for(lcnt = 1;lcnt<=(MAX_CARD_TYPE*MAX_CARD_NUM);lcnt++)
    {
         selected = RandCard(arr);
  
         PrintCard(lcnt,selected/MAX_CARD_NUM,selected%MAX_CARD_NUM);
    }
 
}

 

int RandCard(int base[][MAX_CARD_NUM])

    int cardtype = 0;
    int num = 0;

    int n = 0;

    do
    {
         n = rand()%(MAX_CARD_TYPE*MAX_CARD_NUM);
         cardtype = n/MAX_CARD_NUM;
         num = n%MAX_CARD_NUM;
    }while(base[cardtype][num]);
    base[cardtype][num] = 1;
    return n;  
}

 

 

void PrintCard(int lcnt,int ct,int cn)
{
    printf("%2d번째 카드  %s   %s\n",lcnt,ctypes[ct],ntypes[cn]);

}

반응형

'언어 자료구조 알고리즘 > C언어 예제' 카테고리의 다른 글

new 연산자 오버로딩  (0) 2009.08.19
퀵소트  (0) 2009.08.19
선택정렬  (0) 2009.08.19
삽입정렬  (0) 2009.08.19
정보 올림피아드  (0) 2009.08.19
파이, e, sin 구하기  (0) 2009.08.19
Sin함수 만들기(II)  (0) 2009.08.19
적분 공식을 이용한 Sin(x)함수 만들기  (0) 2009.08.19
정보올림피아드 프로그래밍  (0) 2009.08.19
간단하게 Random함수 만들기  (0) 2009.08.19