3

ここには簡単な問題がありますが、これを修正する方法がわかりません! ナンバ ジェネレータを作成しようとしていますが、1 ~ 6 から乱数を選択するだけにしたいです。ゼロはありません!この質問は重複としてマークされましたが、これはC++ ではなくCであるため、そうすべきではありません。

srand(static_cast<unsigned int>(time(0)));
int dice = rand()%6;
4

3 に答える 3

13

rand() % 6の範囲の数値を与える0..5.範囲を取得するには 1 を追加します1..6

于 2013-08-08T03:52:52.257 に答える
9

C++11 がオプションである場合は、std::uniform_int_distributionややシンプルでエラーが発生しにくいオプションもあります ( rand() 有害なプレゼンテーションスライドを参照):

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::uniform_int_distribution<> dist(1, 6);

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

    return 0 ;
}

この前のスレッド乱数ジェネレーターを使用すると、モジュロ バイアスがあると人々が言うのはなぜですか? クリスがコメントで指摘したモジュロバイアスを明確に説明しています。

于 2013-08-08T04:01:23.650 に答える