【问题标题】:randomizing a sequence in a 1d array in c [duplicate]在c中随机化一维数组中的序列[重复]
【发布时间】:2018-04-30 07:18:24
【问题描述】:

**这不是生成数字,而是重新排列一维数组中的数字 需要帮助随机化 rbox 数组中的 0、1、2、3 数字序列。但是,当随机时,它显示 1,1,1,1 或 2,2,2,2 等。有人知道如何将序列随机化为 0,3,2,1 或 2,0,1,3 等吗?

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]);
}

【问题讨论】:

  • 您正在生成 一个 随机数,然后将该数字放入数组 rbox 的 4 个元素中。那你期待什么?我怀疑您对编程做出了一些非常错误的假设。开始阅读一本好的初学者书籍。

标签: c


【解决方案1】:

填充数组,然后打乱并打印打乱的数组。

#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;
}

【讨论】:

    【解决方案2】:

    这是糟糕编码的典型例子。

    随机变量获取一次值,并且您在循环中将相同的值分配给您的数组四次。

    这样做,

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

    但这将有机会重复随机值。 您需要在每次迭代时验证该值是否以前出现在数组中。

    【讨论】:

      【解决方案3】:
      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.1。如果2乘以rand()的比值小于1,则将迭代次数放入数组中。

      3.2。否则增加迭代。

      【讨论】:

      • 谢谢,但知道如何让它独一无二吗?
      • @andrewyong.: 你正在使用rand(),你可以使用一个简单的算法,只要你看到相同的值......你将再次计算rand()
      • @andrewyong 使其独一无二是另一个问题。你会如何在纸上做到这一点?
      猜你喜欢
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2019-07-15
      • 2016-04-24
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多