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. 구현, 시뮬레이션

댓글남기기