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

조건을 가진 확률분포

바로이순간 2012. 9. 16. 13:39
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 <iostream> 
#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