乱数生成に関するC++の実装と解析


を使用します。srand 関数と time_t 型を使用して、乱数シードを初期化することができます。

以下に、乱数生成の手法とそれぞれのコード例をいくつか紹介します。

  1. 現在の時刻をシードとして使用する方法:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    for (int i = 0; i < 10; ++i) {
        int randomNum = std::rand();
        std::cout << randomNum << std::endl;
    }

    return 0;
}

この例では、std::time 関数を使用して現在の時刻を取得し、それを srand 関数のシードとして使用しています。これにより、プログラムを実行するたびに異なる乱数列が生成されます。

  1. ユーザーが指定したシードを使用する方法:
#include <iostream>
#include <cstdlib>
int main() {
    unsigned int seed = 1234; // ユーザーが指定するシード
    std::srand(seed);

    for (int i = 0; i < 10; ++i) {
        int randomNum = std::rand();
        std::cout << randomNum << std::endl;
    }

    return 0;
}

この例では、ユーザーが乱数のシードを指定できるようになっています。std::srand 関数にユーザーが指定したシードを渡すことで、同じシードを使用した場合には同じ乱数列が生成されます。

  1. 範囲を指定して整数の乱数を生成する方法:
#include <iostream>
#include <cstdlib>
#include <ctime>
int getRandomNumber(int min, int max) {
    return min + std::rand() % (max - min + 1);
}
int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    for (int i = 0; i < 10; ++i) {
        int randomNum = getRandomNumber(1, 100);
        std::cout << randomNum << std::endl;
    }

    return 0;
}

この例では、指定した範囲(1から100)の整数を生成する関数 getRandomNumber を定義しています。std::rand 関数の結果を範囲内に収めるために、余りの計算を行っています。

以上のように、C++では乱数生成を行うために srand 関数と rand 関数を組み合わせて使用します。適切なシードの設定や範囲指定により、さまざまな乱数の生成が可能です。