在C 中均匀地将随机数均匀

make random numbers evenly in c++

本文关键字:随机数      更新时间:2023-10-16

我想列出数字列表0,1,2,即16个元素,每个数字出现相等的次数(plus或sigus 1)

因此,结果看起来就是这样: 0, 1, 0, 2, 1, 2, 1, 0, 2, 2, 1, 1, 0, 0, 2, 0

每个数字出现的次数

0 : 6
1 : 5
2 : 5

这是我的代码,有什么想法均匀的?

srand(time(NULL));
for(int j = 0; j < 16; j++)
{
    int num = rand() % 3;
    if(j == 15)
        cout << num;
    else
        cout << num << ",";
}

您可以创建一个相等数量的值的列表,然后随机洗牌。

类似的东西:

#include <algorithm>
#include <iostream>
#include <random>
#include <vector>
int main()
{
    std::vector<int> v;
    // 16 numbers between 0-3 equally divided    
    for(auto i = 0; i < 16; ++i)
        v.push_back(i % 3);
    // mt is a random number generator    
    std::mt19937 mt{std::random_device{}()};
    // randomly shuffle the numbers    
    std::shuffle(std::begin(v), std::end(v), mt);
    for(auto i: v)
        std::cout << " " << i;
    std::cout << 'n';
}

输出:

 0 2 0 1 0 1 0 1 2 2 0 1 1 2 2 0