c·c++/c 프로그래밍

확률 시뮬레이터 (연속해서 정해진 수만큼 성공할 확률)

바로이순간 2014. 3. 17. 11:03

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main() { 

    // prob는 성공할 확률의 변수

    // count는 연속해서 성공할 횟수

    // x는 0부터 99까지의 범위를 가지는 난수

    // ss는 연속해서 성공한 회수를 나타내는 변수

    int prob, count, x, ss;

    // n은 처음부터 연속해서 count번 성공할 때 까지의 회수

    // 아주 큰 수가 나올 경우를 대비해서 long long형 (64비트 정수)으로 잡음

    long long n=0;


    printf("성공할 확률입력: ");

    scanf("%d", &prob);  // 성공할 확률을 입력받음

    srand(time(NULL));  // 난수발생을 초기화 시킴


    printf("연속성공할 회수: ");

    scanf("%d", &count); // 연속해서 성공할 회수를 입력받음


    ss=0;  // 지금까지 연속해서 성공한 회수는 0이다.

    while(1) {

        x=rand()%100;   // 0부터 99까지의 난수 x

        if(x<prob) {         // 만약 x가 성공할 확률 prob보다 작다면 성공했다고 본다.

            ss+=1;            // 0부터 시작하기 때문에 작을 경우에 성공했다고 판별한다.

        } else {              // 밑에서 실패하면 ss의 값은 0이 된다. 따라서 ss의 값은 연속해서

            if(ss>=count) {   // 성공한 횟수가 된다.

                break;         // 연속해서 성공한 횟수가 count 번이 되면 종료한다.

            }

            ss=0;              // 실패했을 경우 ss의 값은 0이 된다.

        }

        n+=1;    // 매번 n의 값은 1이 증가한다.

    }

    printf("%lld번만에 연속해서 %d번을 성공했슴.\n", n, count);


    return 0;

}