동전 던지기 게임 (난수)

조회수 1278회

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 해주세요!! 다른 사람이 보기 편해야, 답변하기 수월해집니다..... :(

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)