零和一的二维数组

时间:2015-07-10 16:45:45

标签: c++ arrays random

我想生成一个零和一的二维数组,使其为25%零和75%零。

我知道我将使用rand()%2函数但是如何将零限制为只有25%的数组呢?

3 个答案:

答案 0 :(得分:2)

使用零创建大小为N的向量。 将第一个N*0.75元素设置为一个。 随机化矢量。

示例代码:

#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <iterator>

int main ()
{
  std::srand ( unsigned ( std::time(0) ) );

  const int N = 100;
  const int zero_percent = 25;
  const int one_percent = 100-zero_percent;

  const int one_count = (N * one_percent)/100;


  std::vector<int> v(N);
  std::fill(v.begin(), v.begin()+one_count, 1);

  std::random_shuffle (v.begin(), v.end());


  std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));

  return 0;
}

<强>输出

1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 

直播示例:http://ideone.com/CdlaMy

答案 1 :(得分:0)

如果只有0和1,一个可能的解决方案是将所有坐标保持在某种类型的&#34; set&#34;然后随机取出(N / M / 4(n和m是数组的大小)次(得到25%的随机坐标))并标记为1,然后将其余标记为0.

答案 2 :(得分:0)

您可以使用以下内容初始化数组的每个元素:

int zeroOr1() { // Generates 
    static std::default_random_engine gen;
    static std::uniform_int_distribution<int> dist(0,3);
    return (dist(gen) % 4) >= 1;
}

由于dist(gen) % 4产生[0, 1, 2, 3]之一的可能性相同,(dist(gen) % 4) >= 1将在约75%的时间内评估为truefalse约为25%的{{1}}时间。

注意:这并不像其他答案一样保证完美的25/75分布,但它适用于所有阵列大小。我需要有关申请的更多信息,以确定这是否足够好或不合适。