[Console] 바카라
C 언어 실습
문제
바카라 게임
1 ~ 13 사이의 숫자를 두 개를 뽑아
왼쪽이 큰지, 오른쪽이 큰지 아니면 같은지를 맞추는 게임입니다.
1. 컴퓨터는 1 ~ 13 의 두 개의 랜덤값을 뽑습니다.
2. 만약 Left : 1, Right : 3 을 뽑았을 때
3. Left, Middle, Right 를 선택합니다.
만약 뽑은 숫자가 Left보다 크거나, Right보다 크다면 1점을 얻습니다.
Middle(같다) 이라면 4점을 얻습니다.
만약 Left, Right 를 틀렸다면 1점을 잃습니다.
Middle(같다) 이라면 4점을 잃습니다.
총 10번 진행하며 마지막에 점수가 더 높은 사람이 이기는 게임입니다.
학습
1. 셔플 알고리즘: Knuth Shuffle
- 한쪽 끝(앞 or 뒤)부터 한 자리씩 이동하면서, 각 자리에 들어갈 요소를 랜덤하게 뽑음
- 랜덤 숫자 대상: 그 자리를 포함해서 아직 정하지 않는 자리에 있는 요소들
- 랜덤하게 뽑힐 대상 리스트를 줄여가면서, 기존에 뽑힌 요소를 배제함
- 랜덤 함수가 O(1)의 시간복잡도를 가지면, 전체 알고리즘은 O(n)
void shuffle(int card[], const int n)
{
for (int i = n - 1; i > 0; i--)
{
int j = rand() % i;
swap(&card[i], &card[j]);
}
}
2. 포인터 스왑
3. 함수에서 포인터 매개변수를 이용한 연산
4. 구현, 시뮬레이션
댓글남기기