在随机位置上生成固定数量的1s

时间:2018-12-12 21:24:08

标签: c++ algorithm

有没有一种方法可以让vector中仅包含数字01的{​​{1}}中随机出现n次的数字1?

示例

  1. vector大小5,1必须在vector

    中随机出现两次
      

    [0,1,0,1,0]

  2. vector大小8,1必须在vector

    中随机出现5次
      

    [1,1,0,0,0,1,0,1]

等等。

如何用C ++完成?

1 个答案:

答案 0 :(得分:2)

尝试一下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>

void print_v (const std::vector <int>& v)
{
    for (int i : v)
        std::cout << i;
    std::cout << "\n";
}

int main()
{
    std::vector <int> v;

    v.push_back (1);
    v.push_back (1);
    v.push_back (0);
    v.push_back (0);
    v.push_back (0);
    print_v (v);

    std::random_device rd;
    std::mt19937 g (rd ());    
    std::shuffle (v.begin (), v.end (), g);
    print_v (v);
}

代表输出:

11000
00011

Live demo

(我将留给您构造原始的,未改组的向量)。