1

私はプログラミングが初めてで、10,000 ゲームのクラップスをシミュレートするプログラムに取り組まなければなりませんでした。最初のロールまたは 7 (ハウスが勝つ) に一致するまでプレーヤーが何度も何度もロールする機能「diceRoll」を追加するまで、ハウスとプレーヤーのポイントを問題なく計算することができました。今では明らかにランダムではない結果が得られます (家が 10,000 回中 0 回勝つなど)。私は何を間違えましたか?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

bool diceRoll (int a)
{
    srand( (unsigned)time(NULL));
    int n = 0;
    int b = 0;
    while(n < 1) {
        b = rand() % 12;
        if(b == a || b == 6) n++;
    }
    if(b == 6) return false;
    else return true;
}


int main (void)
{
    srand( (unsigned)time(NULL));
    int a, n, house, player, point;
    house = 0;
    player = 0;
    point = 0;

    for(n = 0; n < 10000; n++) {
        a = rand() % 12;
        if(a == 1 || a == 2 || a == 11) {
            house++;
        }
        else if(a == 6 || a == 10) {
            player++;
        }
        else {
            if(diceRoll(a) == true) player++;
            else house++;
        }
    }

    printf("The house has %i points.\n", house);
    printf("The player has %i points.\n", player);
    return 0;
}
4

2 に答える 2

2

srand()inの呼び出しを削除diceRollすれば問題ありません (これはmodulo usage によるバイアスを無視します)。

于 2013-09-19T21:11:25.653 に答える
0

main()(ループではなく) シードするだけで、関数にはシードしないでくださいdiceRoll(a)

私はあなたのやり方でそれを実行し、得house = 2, player = 9998ました。

を削除するsrand((unsigned)time(null));と、次のdiceroll(a)ように戻ってきました。

The house has 5435 points

The player has 4565 points

それがあなたが望んでいたことだと思います

bool diceRoll (int a)
{
    int n = 0;
    int b = 0;
    while(n < 1) {
        b = rand() % 12;
        if(b == a || b == 6) n++;
    }
    if(b == 6) return false;
    else return true;
}

int main (void)
{
    srand( (unsigned)time(NULL));
    int a, n, house, player, point;
    house = 0;
    player = 0;
    point = 0;

    for(n = 0; n < 10000; n++) {
        a = rand() % 12;
        if(a == 1 || a == 2 || a == 11) {
            house++;
        }
        else if(a == 6 || a == 10) {
            player++;
        }
        else {
            if(diceRoll(a) == true) player++;
            else house++;
        }
    }

    printf("The house has %i points.\n", house);
    printf("The player has %i points.\n", player);
    return 0;
}
于 2013-09-19T21:11:23.860 に答える