#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;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
파스칼의 삼각형(2차원 배열) (0) | 2014.03.21 |
---|---|
vc++ 2013 scanf오류 (0) | 2014.03.17 |
scanf("%d ", &x); 에서 빈칸의 역할 (0) | 2014.03.14 |
중복을 피하여 난수를 선택하는 방법1,2 (0) | 2014.03.10 |
c언어 다음에 무슨공부를 할까요? (0) | 2014.03.05 |