a=1, b=0 이고
1000번 무작위로 숫자(1 or 0) 를 나열 할때.
만약 1 이 나왔을 경우: 그다음에 (1 이 나올 확률은 50%), (0 이 나올 확률은 50%)
0 이 나왓을 경우: 그다음에 (1 이 나올 확률은 30%), (0 이 나올 확률은 70%)
상대빈도로 a의 확률은 얼마인가. (ex, 1이 300번 나왔을경우 : 300/1000 )
-------------------------------------------------------------------------------------------------------------------
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
int i, sum=0, n, x, z;
srand(time(NULL));
cout<<"정수: ";
cin>>n;
// 처음에는 50%의 가능성으로 0이나 1을 뽑는다.
x=rand()%2;
sum=sum+x;
for(i=1;i<n;++i) {
// 만약 먼저 뽑은 값이 0이라면 30%의 확률로 1이 나와야 한다.
// 혹은 10가지 경우중에서 3가지 경우를 택해도 된다.
// rand()%10의 값은 0,1,2,3,4,5,6,7,8,9 의 10가지 경우이다.
// 이값에 7을 더하면 7,8,9,10,11,12,13,14,15,16 의 10가지 경우이다.
// 이값을 10으로 나눈 몫은 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 이다.
// 1에서 이 값을 빼주면 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 가 된다.
// 즉 30%의 확률로 1이 되고, 70%의 확률로 0이 된다.
if(x==0) x=1-(rand()%10+7)/10;
// x가 1이라면 50%의 확률로 1과 0이 된다.
else x=rand()%2;
// 1의 값을 sum에 더하였다. 0을 더하여도 변화가 없다.
sum=sum+x;
}
// sum은 1이 몇번 나왔는지 이다. n은 전체 경우의 수이다.
cout<<sum<<"/"<<n;
return 0;
}
'c·c++ > c++ 프로그래밍' 카테고리의 다른 글
스택 클래스 (0) | 2012.11.05 |
---|---|
다항식의 곱셈 (0) | 2012.09.24 |
cin.getline 입력 (0) | 2012.09.16 |
동적할당을 이용한 무한자리수 덧셈 (0) | 2012.09.14 |
단어 갯수세기 (0) | 2012.08.31 |