rand()%2;のように、0、1の乱数を作る時、例えば1の数は5個、0が15個のように数を制限することは出来ないのでしょうか?また、0、1、2の乱数を作る時、同様に0が10個、1が7個、2が3個のように制限することは出来るのでしょうか?宜しくお願いします。最初にそのデータを作成しておいて、ランダムを使って交換を行うようにすればよいと思います。最初にそのデータを作成しておいて、ランダムを使って交換を行うようにすればよいと思います。0以上left未満の整数をランダムで1個選ぶ。ここではidxとする。leftの値を1減らすのようにすればいいと思います。スマホからの投稿なのでコードは省略します。素直にカウンタを用いて「各乱数の出る個数を限定する」方法も考えられます。3の方法より空間計算量は優りますが、時間計算量は劣るかもしれません。5年前std::randには問題点が多く、現在の規格で非推奨となっており、将来的に削除されます。C++11で追加された<random>ヘッダをインクルードし、擬似乱数エンジンを使いましょう。std::random_shuffleも、std::randに依存する場合があり、std::randと同様に非推奨となります。このまま議論が進めば、std::randよりも早くC++1z辺りには削除されます。std::shuffleを使いましょう。std::fill_nで0が15個、1が5個でstd::arrayを埋めています。5年前もし個数を限定しないで、だいたいの比で良ければ、以下のようにできます。std::endl;}25%の確率で1,75%の確率で0になります。結果は、4,16であったり、3,17であったり、5,15であったり、ランダムですが。5の方法では、残っている候補の中からほぼ等確率で各候補が出ます。5と違って無駄な乱数生成をしない方法のコードを載せます。配列で表現されたBITのidx番目(0-origin)までの和を求める。O(出す乱数の総数)からO(出す乱数の候補の種類数)に減らすことができます。10で「候補がなくなったらBITからその候補があるという情報を消す」という処理をする代わりに、BITに各候補の残り数を直接入れます。配列で表現されたBITのidx番目(0-origin)までの和を求める。私のコードについて補足します。https://sites.google.com/site/cpprefjp/reference/randomstd::random_deviceは、完全な乱数生成エンジンです。ハードウェアのノイズやマウスの動き、CPU温度など、予測不可能な値から乱数を生成するため(実装は処理系定義)、生成される値も予測不可能である完全な乱数です。(ただし、処理系によっては実装の制限により擬似乱数になる可能性はある)ただしコストが高いので、頻繁に呼び出したりするものではなく、擬似乱数エンジンのシードに使用する事が多いようです。私のコードでもそのように使っています。std::mt19937が、標準ライブラリで用意されている擬似乱数生成エンジンのひとつです。メルセンヌツイスター法のエンジンに、デフォルトでパラメータが設定されています。メルセンヌツイスター以外にも線形合同法やキャリー付き減算法などが用意されています。メルセンヌツイスターは非常に長い周期を持ち、大きな次元で均等分布します。デフォルト設定されているstd::mt19937は627次元であるため、空間的に非常な大きな領域を保持します。周期は219937-1です。簡単に扱える上、非常に高精度である乱数生成エンジンです。std::shuffleの第三引数で、乱数生成エンジンを指定できます。ここでメルセンヌツイスターのようなエンジンのオブジェクトを指定することで、シャッフルの精度が変わります。std::discrete_distributionは、標本分布です。指定した確率列に基づいて離散した確率分布をします。分布生成エンジンもたくさん用意されているので、目的に合ったエンジンに差し替えれば同じように使えます。ミクプラは自由にリンクできます。