我想制作一个长度为16个元素的数字0,1,2列表,其中每个数字出现的次数相等(加或减1)
所以结果会是这样的: 0, 1, 0, 2, 1, 2, 1, 0, 2, 2, 1, 1, 0, 0, 2, 0
每个数字出现的次数
0 : 6
1 : 5
2 : 5
Run Code Online (Sandbox Code Playgroud)
这是我的代码,任何想法,使这些均匀?
srand(time(NULL));
for(int j = 0; j < 16; j++)
{
int num = rand() % 3;
if(j == 15)
cout << num;
else
cout << num << ",";
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个包含所需值的相同数量的列表,然后随机随机播放它们.
像这样的东西:
#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';
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 2 0 1 0 1 0 1 2 2 0 1 1 2 2 0
Run Code Online (Sandbox Code Playgroud)