2020. 4. 19.

[c] 인프런 42. 프로젝트 발모제 찾기 강의 정리


기존에 쓰던 array 소스파일에 main array_main으로 수정하고
새로운 소스파일에 array_project.c 파일을 만든다.


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

int main(void)
{
srand(time(NULL));
  • 랜덤값을 넣는다.
printf("\n\n=== 아빠는 대머리 게임 ===\n\n");
int answer; // 사용자 입력값
int treatment = rand() % 4; // 발모제 선택(0-3)
  • 진짜 발모제

int cntShowBottle = 0; // 이번게임에 보여줄 병 개수        
  • 초기화
int prevOntShowBottle = 0; // 앞게임에 보여준 병 개수        
  • 초기화
// 서로 보여주는 병 갯수를 다르케 하여 정답률 향상(처음에 2 > 다음에 3..)

//3번의 기회(3번의 발모제 투여 시도)
for (int i = 1; i <= 3; i++)
{
int bottle[4] = { 0, 0, 0, 0 }; // 4개의 병
  • 병은 선택되지 않았다. 초기화
do {
cntShowBottle = rand() % 2 + 2; //보여줄 병 갯수(0-1, +2 -> 2,3)
} while (cntShowBottle == prevOntShowBottle);
  • 지금 보여줄 병의 갯수와 전에 보여줬던 병의 갯수가 같다면 랜덤으로 병의 갯수를 바꿔준다.
prevOntShowBottle = cntShowBottle;
  • 바뀐 병의 갯수는 전으로 업데이트해줌
int isincluded = 0; // 보여줄 병 중에 발모제가 포함되었느지 여부

printf(" > %d 번째 시도 : ", i);

// 보여줄 병 종류를 선택(발모제 담긴 확률 )
for (int j = 0; j < cntShowBottle; j++)
{
int randBottle = rand() % 4; // 0~3
// 아직 선택되지 않은 병이면, 선택 처리
if (bottle[randBottle] == 0)
  • 선택되지 않아서 0이라면
{
bottle[randBottle] = 1;
  • 선택하게 되서 1 바꿔준다.
if (randBottle == treatment)
  • 진짜 발모제라면 1 처리
{
isincluded = 1;
}
}
//이미 선택된 병이면, 중복이므로 다시 선택
else
{
j--;
}
}

// 사용자에게 문제 표시
for (int k = 0; k < 4; k++) {
if (bottle[k] == 1)
{
printf("%d ", k + 1);
}
}
printf("물약을 머리에 바릅니다\n\n");

if (isincluded == 1)
{
printf(" >> 성공 ! 머리가 났어요 !! \n");
}
else
{
printf(" >> 실패 ! 머리가 나지 않았어요.. ㅠㅠ \n");
}

printf("\n 계속 하려면 아무키나 누르세요...");
getchar();
}
printf("\n\n 발모제는 몇 번일까요?");
scanf_s("%d", &answer);
if (answer == treatment + 1) {
printf("\n>> 정답입니다.");
}
else
{
printf("\n>> ! 틀렸어요, 정답은 %d 입니다\n",treatment+1);
}
return 0;
}



댓글 없음:

댓글 쓰기