|
: 스페이드 A,2,3,...J,Q,K
: 다이아 A,2,3,...J,Q,K
: 클로바 A,2,3,...J,Q,K
: 하트 A,2,3,...J,Q,K
해결 방법은 배열을 이용하는 겁니다.
스페이드 - 0
다이아 - 1
클로버 - 2
하트 - 3
이렇게 인덱스 번호를 부여하고
A 2 3 4 5 6 7 8 9 10 J Q K
0 1 2 3 4 5 6 7 8 9 10 11 12
역시 다음과 같이 인덱스 번호를 부여합니다.
이렇게 보면, 모든 카드는
char Card[4][13] = {0, };
이 배열 안에 저장이 가능합니다.
카드 자체를 저장하기 보다는
랜덤으로 카드를 뽑아서
뽑은 카드는 1로 뽑히지 않은 카드는 0으로 배열 안에 체크를 하는 것이지요
만약 다이아3이 나오면
Card[1][2] = 1;
이렇게 나왔다고 표시를 합니다.
그럼 이제 카드를 랜덤으로 굴리는 경우르를 생각해 볼까요
랜덤으로 굴리는 경우 역시 두 개의 인덱스를 굴리면 됩니다.
카드 종류를 랜덤으로 굴리고 (0~3)
카드 번호를 랜덤으로 굴리면 됩니다(0~12)
그리고 나서 카드가 이미 뽑혔는지 체크를 합니다.
do
{
GetCard(...); //카드를 뽑고
} while(Card[1][2] == 1); // 이미 뽑혀있는 카드이면 반복
Card[1][2] = 1; // 뽑힌 카드라는 걸 배열에 표시
이런 식으로 52번만 반복하면 되겠지요.
웬지 숙제같아 보이는 문제입니다만, 혼자 공부하시는 거라고 믿고 참고하시라고 썼습니다.
뭐든 확실히 정해둔 알고리즘은 없답니다. 자기 머리 굴리기 나름입니다.
|