忍者ブログ

はしりがき

ガラパゴスへよおこそ。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

試作コード

#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%

PR

comment

福音とならんことを

  • thiary 
  • 2010/05/08(土) 19:52
  • edit

日本DM界、始まりましたね・・・
極楽さんやつるさんに続く綺羅星になった昴さんが見えます。

私のエクセルでも導入してみようかなぁ・・・

無題

  • 昴 
  • 2010/05/08(土) 21:34
  • edit

駄菓子菓子、昴はプレアデス星団なのでありました

VBAは詳しくないけど、この際覚えてしまおうかしらどうしようかしら

お名前
タイトル
E-MAIL
URL
コメント
パスワード

trackback

この記事にトラックバックする:

TemplateDesign by KARMA7

忍者ブログ [PR]