web-dev-qa-db-ja.com

ある範囲の乱数C ++

可能性のある複製:
範囲全体で一様に乱数を生成

私は25から63の間の数字を持ちたいと言って、ある範囲でC++で乱数を生成したい.

どうすればそれができますか。

ありがとう

46
Abdul Samad

標準ライブラリ(TR1)への追加に含まれるランダム機能を使用できます。または、プレーンCで機能する同じ古い手法を使用できます。

25 + ( std::Rand() % ( 63 - 25 + 1 ) )
17
K-ballo

まだ誰も最新のC++アプローチを投稿していないため、

#include <iostream>
#include <random>
int main()
{
    std::random_device rd; // obtain a random number from hardware
    std::mt19937 eng(rd()); // seed the generator
    std::uniform_int_distribution<> distr(25, 63); // define the range

    for(int n=0; n<40; ++n)
        std::cout << distr(eng) << ' '; // generate numbers
}
180
Cubbi
int random(int min, int max) //range : [min, max)
{
   static bool first = true;
   if (first) 
   {  
      srand( time(NULL) ); //seeding for the first time only!
      first = false;
   }
   return min + Rand() % (( max + 1 ) - min);
}
17
Nawaz
int range = max - min + 1;
int num = Rand() % range + min;
9
float RandomFloat(float min, float max)
{
    float r = (float)Rand() / (float)Rand_MAX;
    return min + r * (max - min);
}
5
Yurii Hohan

Rand関数を使用します。

http://www.cplusplus.com/reference/clibrary/cstdlib/Rand/

見積もり:

A typical way to generate pseudo-random numbers in a determined range using Rand is to use the modulo of the returned value by the range span and add the initial value of the range:

( value % 100 ) is in the range 0 to 99
( value % 100 + 1 ) is in the range 1 to 100
( value % 30 + 1985 ) is in the range 1985 to 2014
3
Kiley Naro