동전 던지기 게임 (난수)
조회수 1280회
include
include
include
int coin_toss(void); int main(void) { int toss; int heads =0; int tails = 0;
for (toss = 0; toss < 100; toss++) {
if (coin_toss() == 1)
heads++;
else
tails++;
}
}
int coin_toss(void) { int i; srand((unsigned)time(NULL)); i = rand() % 2; if (i== 0) return 0; else return 1; }
결과가 앞면:0 뒷면:100 으로만 떠서요 ㅠㅠ stdio, stdlib, time 헤더파일 추가 했어요!
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
아무래도, 프로그램의 실행시간이 너무 짧아서 생기는 문제 같아요!! 프로그램이 실행되는데 1초도 걸리지 않기 때문에, srand((unsigned)time(NULL)) 에서 seed값이 초기화되지 않고 있는 것 같습니다.
이런 경우, rand()의 매 호출마다 seed값을 변경해줘야 할 필요가 있을 것 같은데요, 저 같은 경우는 질문자님의 coin_toss() 함수를 다음처럼 바꿔봤어요!!
int coin_toss() { int i; srand(time(NULL)+rand()); // 이 부분이 바뀌었습니다! i = rand() % 2; if (i == 0) return 0; else return 1; }
이렇게 srand 부분에 현재의 시간을 받는 time(NULL)과 rand()의 값을 넣어서, time(NULL)이 항상 그대로여도, seed가 랜덤하게 바뀌도록 설정했습니다. 이렇게 하면, time(NULL)은 실행하는 시간에 따라 바뀌고 + rand()의 효과로 난수도 새롭게 생성이 됩니다 :P
한번 이렇게 해서 printf로 값을 확인해보세요!! ㅎㅎ
p.s.) 다음에는 질문하실 때, 질문 상당의 <> 표시(code sample)를 눌러 질문할 코드를 ctrl+v 해주세요!! 다른 사람이 보기 편해야, 답변하기 수월해집니다..... :(
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력