Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1897] Re:52장의 카드를 섞는 방법 - 제가 쓰는 해결방법
SteelHeart [kronian] 1765 읽음    2003-01-28 03:40
: 스페이드 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번만 반복하면 되겠지요.


웬지 숙제같아 보이는 문제입니다만, 혼자 공부하시는 거라고 믿고 참고하시라고 썼습니다.

뭐든 확실히 정해둔 알고리즘은 없답니다. 자기 머리 굴리기 나름입니다.

+ -

관련 글 리스트
1895 52장의 카드를 섞는 방법 c++ 1751 2003/01/28
3832     Re:52장의 카드를 섞는 방법 임문환 1634 2003/01/28
1907     Re:52장의 카드를 섞는 방법 뚱뚜루 1613 2003/01/28
1898     Re:52장의 카드를 섞는 방법 임문환 2851 2003/01/28
1900         Re:Re:52장의 카드를 섞는 방법 c++ 1525 2003/01/28
1897     Re:52장의 카드를 섞는 방법 - 제가 쓰는 해결방법 SteelHeart 1765 2003/01/28
1899         Re:Re:52장의 카드를 섞는 방법 - 제가 쓰는 해결방법 c++ 2117 2003/01/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.