C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でループ内に毎回異なる乱数を生成する方法

C++で乱数を生成する方法について解説します。ここでは、0から指定した上限値までの範囲で乱数を生成します(このプログラムでは最大値を100としています)。

srand()関数とは

ループ内で異なる乱数を得るためには、srand()関数を使用します。これはC++の標準ライブラリ(<cstdlib>)に含まれる関数で、void srand(unsigned int seed) という形式を持ち、rand()関数が利用する擬似乱数生成器のシード(種)を設定する役割を担います。

srand()関数の宣言は以下の通りです。

void srand(unsigned int seed)

引数には「seed(シード)」と呼ばれる整数値を渡します。これは、擬似乱数生成アルゴリズムの初期値として使われる値です。なお、この関数には戻り値がありません。

乱数の取得方法

実際に乱数を取得するには、rand()関数を使用します。rand()はそのままでは非常に大きな整数を返すため、0からmaxまでの範囲に収めるには、剰余演算子(%)を使って余りを求めます。

また、シード値にはtime(0)関数の戻り値をsrand()に渡すのが一般的です。time(0)は現在時刻を秒単位で返すため、プログラムを実行するたびに異なるシードが設定され、その結果、実行ごとに異なる乱数列が得られます。もしsrand()を呼び出さなければ、rand()は毎回同じ順序で同じ数値を返してしまう点に注意してください。

サンプルコード

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
main() {
   int max;
   max = 100; // 乱数生成の上限値を設定
   srand(time(0));
   for(int i = 0; i<10; i++) { // 10個の乱数を生成
      cout << "The random number is: "<<rand()%max << endl;
   }
}

実行結果

The random number is: 6
The random number is: 82
The random number is: 51
The random number is: 46
The random number is: 97
The random number is: 60
The random number is: 20
The random number is: 2
The random number is: 55
The random number is: 91

このように、srand(time(0))でシードを設定してからループ内でrand()%maxを呼び出すことで、0から99までの範囲の異なる乱数を繰り返し生成できます。

  1. Androidで指定した範囲の乱数を生成する方法【初心者向けサンプルコード付き】

    この記事では、Androidアプリで指定した範囲(最小値〜最大値)の中からランダムな数値を生成する方法を、実際に動作するサンプルコードとともに解説します。ユーザーが入力した最小値と最大値をもとに、ボタンをタップすると乱数が画面に表示されるシンプルなアプリを作成していきます。 乱数生成の基本的な仕組み Java標準のjava.util.Randomクラスを利用すると、簡単に乱数を生成できます。任意の範囲内の乱数を取得するには、次の式を使います。 output = r.nextInt((max - min) + 1) + min; nextInt(n)メソッドは「0以上 n 未満」の整数を返します

  2. C++でデューデニー数(Dudeney Number)を判定する方法

    デューデニー数とは? デューデニー数(Dudeney Number)とは、数論で定義される特殊な自然数の一つです。「ある自然数が、別の自然数の完全立方数に等しく、かつ元の数の各桁の数字和が、その立方根となる数の桁和と一致する」とき、その数をデューデニー数と呼びます(Wikipediaより)。 この数は、イギリスの著名なパズル作家であるヘンリー・デューデニー(Henry Dudeney)によって発見されました。数学的には次の式で表されます。 有名な例としては 512 = 8³ が挙げられます。512 の桁和は 5 + 1 + 2 = 8 となり、立方根である 8 と一致するため、512 はデ