如何在随机位置填充具有1和0的特定数字的数组?

Chr*_*i33 11 c++ arrays sorting random arduino

我有一个数组有8个点填充,4个1和4个零填充它,但希望位置是随机的.我有点难过如何做到这一点,而不是多余.有没有一种简单的方法可以做到这一点,或者我必须随机填充1或0的数组然后检查,看看它是否具有正确数量的两者?我目前的代码是沿着的

void setup() {
  int one = 0;
  randomSeed(analogRead(A0));
  for (int i=0; i<8; i++){
    array[i] = random(0, 2);
    if (array[i] == 1){
      one++;
    }
    if(one >4){
      array[i] = 0;
      one--;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这大部分都有效,但有一些明显的缺点,所以任何关于更好的方法的指针都将受到赞赏.

Oct*_*pus 5

更新:此答案与原始答案略有不同

对于资源紧张的Arduino,此代码就足够了,无需链接额外的库:

int a[8] = { 0,0,0,0,1,1,1,1 };


void setup() {

  randomSeed(analogRead(A0));

  for (int n=7;n>0;n--) {
    int r = random(n+1);
    int t = a[n];
    a[n] = a[r];
    a[r] = t;
  }

}
Run Code Online (Sandbox Code Playgroud)

这正是std :: shuffle函数的实现方式,仅受内置Arduino random()函数实现的有效性限制

  • shuffle的这种"天真"实现不会以相同的概率产生排列.OP并未声明他们希望针对不同的排列进行均匀分布,但这通常是隐含的.如果是这样,这个解决方案甚至都不可接受. (4认同)