随机化c

时间:2017-11-16 16:41:52

标签: c

**这不是生成数字,而是重新排列1d数组中的数字 需要帮助随机化rbox数组中0,1,2,3数字的序列。然而,当随机时,它显示1,1,1,1或2,2,2,2等等。任何人都知道如何将序列随机化为0,3,2,1或2,0,1,3等? / p>

srand(time(NULL));
int randomm = rand()%4;
int rbox[4];
int x;

for(x=0;x<4;x++)
{
    rbox[x] = 0;
}
for(x=0;x<4;x++)
{
    rbox[x] = randomm;
}
for(x=0;x<4;x++)
{
    printf("%i", rbox[x]);
}

3 个答案:

答案 0 :(得分:0)

for(x=0;x<4;x++)
{
    rbox[x] = rand()%4;
}

将数组的每个元素分配给rand()的不同输出。

在这里,您将数组rbox的每个元素分配给相同的值(random) - 这解释了为什么您获得相同的值。

阵列的随机播放:

从用户的评论来看,似乎OP想要创建阵列的随机播放。

现在要么这样做,你可以用值0,1,2,3初始化整个数组然后应用这个算法

-- To shuffle an array a of n elements (indices 0..n-1):
for i from n−1 downto 1 do
     j ← random integer such that 0 ≤ j ≤ i
     exchange a[j] and a[i]

这称为Fisher Yates Shuffle

还有其他方式......

另一种方法是遵循这个算法: -

  
      
  1. 跟踪数字范围(这基本上是highestNumInRange - iteration Number)。
  2.   
  3. 然后跟踪您需要生成的元素数量。
  4.         

    3.1。如果2乘以rand()的比率小于1,则将迭代次数放入数组中。

         

    3.2。否则增加迭代次数。

答案 1 :(得分:0)

这是错误编码的主要例子。

randomm变量获取值一次,并且在循环中为数组分配相同的值四次。

这样做,

for(x=0;x<4;x++)
{
    rbox[x] = rand()%4;
}

但这有可能重复随机值。 您需要在每次迭代时验证数组先前是否已经发生过。

答案 2 :(得分:0)

填充数组,然后将其洗牌并打印混洗阵列。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 4

int main() {
    int rbox[SIZE] = { 0};
    int loop = 0;
    int index = 0;
    int swap = 0;

    srand ( time( NULL));
    for ( loop = 0; loop < SIZE; loop++) {
        rbox[loop] = loop;
    }
    loop = SIZE;
    while ( loop) {
        index = rand ( ) % loop;
        loop--;
        swap = rbox[index];
        rbox[index] = rbox[loop];
        rbox[loop] = swap;;
    }
    for ( loop = 0; loop < SIZE; loop++) {
        printf ( "%d ", rbox[loop]);
    }
    printf ( "\n");

    return 0;
}