ガラパゴスへよおこそ。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
≪ 正式版コードver1.2くらい | | HOME | | 流れ ≫ |
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 8
int main(void){
int cardset[8] = {1,6,12,2,1,4,0,40};
int categorycount[8] = {0,0,0,0,0,0,0,0};
int hand[N];
int i,k,j,l,m;
int duplcount,siev,handnum,categorynum,try,trynum = 1000;
int hitcount = 0;
double probability;
//「それ以外」の枚数設定;cardset[7]==40
for(m=0; m<8; m++){
cardset[7] = cardset[7]-cardset[m];
}
for(try=0; try<trynum; try++){
//カテゴリカウンタのリセット
for(l=0; l<N; l++){
categorycount[l] = 0;
}
//手札生成
for(i=0; i<N; i++){
do{
duplcount = 0;
srand(try + i + (unsigned int)time(NULL));
hand[i] = rand()%40;
for(k=0; k<i; k++){
if(hand[k] == hand[i]) duplcount++;
}
}while(duplcount > 0);
}
//ふるい分け
for(handnum=0; handnum<N; handnum++){
siev = 0;
for(j=0; j<8; j++){
siev = siev + cardset[j];
categorynum = j;
if(siev > hand[handnum]) break;
}
categorycount[categorynum]++;
}
//条件判定
if(categorycount[0]+categorycount[3]+categorycount[4]+categorycount[6]>0 && categorycount[1]+categorycount[3]+categorycount[5]+categorycount[6]>0 && categorycount[2]+categorycount[4]+categorycount[5]+categorycount[6]>0) hitcount++;
//動作確認用
printf("%d and %d\n", hitcount, try);
printf("%d,%d,%d,%d,%d,%d,%d\n",categorycount[0],categorycount[1],categorycount[2],categorycount[3],categorycount[4],categorycount[5],categorycount[6],categorycount[7]);
printf("%d,%d,%d,%d,%d,%d,%d\n",hand[0],hand[1],hand[2],hand[3],hand[4],hand[5],hand[6],hand[7]);
}
//確率計算
probability = 100.0*hitcount/trynum;
printf("P = %f\n", probability);
return 0;
}
trynum=1000で計算したら8分もかかった(Athlon ll X4 630)
パターンAが成立する確率はいくらか、というのを求めるのには十分な速さ。
でも「100回回したときの「パターンAの成立確率」は真の確率とどのくらいズレがあるか」を統計学的に云々、ってのをやるには時間がかかりすぎるか。10回回したときの(ryを1000回やるとしても10000回=80分かかる計算だしな。
重複を避けて乱数生成する部分はまだ改善の余地ありそう
解説書くの面倒だったけど、個別の質問なら受けます
追記
1--61.4%
2--57.6%
3--59.1%
4--59.0%
≪ 正式版コードver1.2くらい | | HOME | | 流れ ≫ |
日本DM界、始まりましたね・・・
極楽さんやつるさんに続く綺羅星になった昴さんが見えます。
私のエクセルでも導入してみようかなぁ・・・