| [ QuizWit ] in KIDS 글 쓴 이(By): dkkang (온톨러지) 날 짜 (Date): 2003년 11월 24일 월요일 오전 11시 19분 41초 제 목(Title): Re: Probability problem 84 아닙니다. 그나저나 재미삼아 시뮬레이션 코드를 만들어 봤습니다. 사용법은 sim <생일이 겹치는 수> <사람 수> <실행 수> 처럼 하면 됩니다. 예) sim 2 22 1000000 실행은 백만번 가까이 돌리면 어느 정도 답이 나오는 거 같군요. #include <stdio.h> #include <stdlib.h> #include <time.h> int simulate(int r, int N); int main(int argc, char** argv) { int r; int N; int ret; int run; int i,j; int same,diff; if (argc!=4) { printf("sim <# of redundancy> <# of people> <# of run>\n"); return -1; } srand(time(NULL)); rand(); r=atoi(argv[1]); printf("r=%d\n",r); N=atoi(argv[2]); printf("N=%d\n",N); run=atoi(argv[3]); printf("run=%d\n",run); same=diff=0; for (i=0;i<run;i++) { ret=simulate(r,N); if (ret==0) { same++; } else { diff++; } } printf("prob of %d has same birthday=%f\n", r,((double)diff)/((double)run)); return 0; } // Monte Carlo int simulate(int r, int N) { int i,j; int day[365]; for (i=0;i<365;i++) day[i]=0; for (i=0;i<N;i++) { j=1+(int) (365.0*rand()/(RAND_MAX+1.0)); day[j]++; } for (i=0;i<365;i++) { if (day[i]>=r) { return -1; // bad } } return 0; // good } |