C++における乱数生成と整数範囲の制御

C++での乱数生成の基本

C++では、乱数を生成するために <random> ライブラリを使用します。このライブラリは様々な乱数生成エンジンと分布を提供しています。

以下に、整数の乱数を生成する基本的なコードを示します。

#include <random>
#include <iostream>

int main() {
    // 乱数生成エンジンの作成
    std::random_device rd;
    std::mt19937 gen(rd());

    // 乱数の分布を設定
    std::uniform_int_distribution<> dis(1, 6);

    // 乱数の生成
    for (int n=0; n<10; ++n)
        std::cout << dis(gen) << ' ';
    std::cout << '\n';

    return 0;
}

このコードは、1から6までの整数の乱数を10個生成します。std::random_device は非決定的な乱数生成器で、std::mt19937 はメルセンヌ・ツイスターという決定的な乱数生成エンジンです。std::uniform_int_distribution<> は指定した範囲内で均一な乱数を生成する分布です。

以上がC++での乱数生成の基本です。次のセクションでは、これらの乱数をどのように整数の範囲に制御するかについて説明します。

整数範囲における乱数の制御

C++の <random> ライブラリを使用すると、生成する乱数の範囲を制御することができます。これは std::uniform_int_distribution<> クラスを使用して行います。

以下に、1から100までの整数の乱数を生成するコードを示します。

#include <random>
#include <iostream>

int main() {
    // 乱数生成エンジンの作成
    std::random_device rd;
    std::mt19937 gen(rd());

    // 乱数の分布を設定
    std::uniform_int_distribution<> dis(1, 100);

    // 乱数の生成
    for (int n=0; n<10; ++n)
        std::cout << dis(gen) << ' ';
    std::cout << '\n';

    return 0;
}

このコードは、1から100までの整数の乱数を10個生成します。std::uniform_int_distribution<> の引数に範囲を指定することで、その範囲内の乱数が生成されます。

以上が整数範囲における乱数の制御の基本です。次のセクションでは、これらの乱数をどのように応用するかについて説明します。

乱数生成の応用例

C++で生成した乱数は、様々な場面で応用することができます。以下に、乱数を用いた簡単なゲームのコードを示します。

#include <random>
#include <iostream>

int main() {
    // 乱数生成エンジンの作成
    std::random_device rd;
    std::mt19937 gen(rd());

    // 乱数の分布を設定
    std::uniform_int_distribution<> dis(1, 100);

    // ゲームの目標値を設定
    int target = dis(gen);

    // ユーザーの入力を受け取る
    int guess;
    std::cout << "1から100までの数を当ててみてください: ";
    std::cin >> guess;

    // ユーザーの入力が目標値と一致するかチェック
    if (guess == target) {
        std::cout << "おめでとうございます!正解です!\n";
    } else {
        std::cout << "残念、不正解です。正解は " << target << " でした。\n";
    }

    return 0;
}

このコードは、1から100までの乱数を生成し、ユーザーにその数を当てさせるゲームです。乱数生成はゲームの目標値を設定するのに使用され、ユーザーの入力と比較されます。

以上が乱数生成の一例です。C++の乱数生成機能は、シミュレーション、ゲーム、統計的なテストなど、さまざまな場面で役立ちます。乱数生成の詳細については、C++の公式ドキュメンテーションを参照してください。

投稿者 dodo

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です