2025年2月13日木曜日

C言語でサイコロを10万回振った結果、各数字がほぼ1/6になることを確認するプログラムを作成してください。

 はい、承知いたしました。C言語でサイコロを10万回振った結果、各数字がほぼ1/6になることを確認するプログラムを作成します。

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

#define NUM_ROLLS 100000

int main() {
    int counts[6] = {0}; // 各数字の出現回数を格納する配列
    int i;

    // 乱数のシードを設定
    srand(time(NULL));

    // サイコロを10万回振る
    for (i = 0; i < NUM_ROLLS; i++) {
        int roll = rand() % 6; // 0から5の乱数を生成
        counts[roll]++; // 出現回数をカウント
    }

    // 各数字の出現回数と確率を表示
    printf("サイコロを%d回振った結果\n", NUM_ROLLS);
    for (i = 0; i < 6; i++) {
        double probability = (double)counts[i] / NUM_ROLLS;
        printf("%d: %d回 (%.2f%%)\n", i + 1, counts[i], probability * 100);
    }

    return 0;
}

このプログラムでは、rand()関数を使って0から5の乱数を生成し、各数字の出現回数をカウントしています。10万回サイコロを振った後、各数字の出現回数と確率を表示します。

実行結果の例

サイコロを100000回振った結果
1: 16682回 (16.68%)
2: 16711回 (16.71%)
3: 16618回 (16.62%)
4: 16752回 (16.75%)
5: 16639回 (16.64%)
6: 16598回 (16.60%)

このように、10万回サイコロを振ると、各数字の出現確率はほぼ1/6(約16.67%)になることが確認できます。

ポイント

  • rand()関数は擬似乱数を生成するため、実行するたびに結果が異なります。
  • srand(time(NULL))で乱数のシードを設定することで、毎回異なる乱数列を生成できます。
  • 試行回数を増やすほど、各数字の出現確率は理論値に近づきます。

このプログラムを参考に、C言語で乱数を使ったシミュレーションを試してみてください。

0 件のコメント:

コメントを投稿