在c中随机化一维数组中的序列[重复]

Posted

技术标签:

【中文标题】在c中随机化一维数组中的序列[重复]【英文标题】:randomizing a sequence in a 1d array in c [duplicate] 【发布时间】: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]);

【问题讨论】:

看看Fisher-Yates shuffle。 您正在生成 一个 随机数,然后将该数字放入数组 rbox 的 4 个元素中。那你期待什么?我怀疑您对编程做出了一些非常错误的假设。开始阅读一本好的初学者书籍。 【参考方案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。


还有其他方法...

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

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

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

3.2。否则增加迭代。

【讨论】:

谢谢,但知道如何让它独一无二吗? @andrewyong.: 你正在使用rand(),你可以使用一个简单的算法,只要你看到相同的值......你将再次计算rand() @andrewyong 使其独一无二是另一个问题。你会如何在纸上做到这一点?

以上是关于在c中随机化一维数组中的序列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言数组详讲(一维数组二维数组的创建初识化及其使用等;建议收藏,干货慢慢)

LeetCode 1480. 一维数组的动态和 / 1588. 所有奇数长度子数组的和 / 528. 按权重随机选择(随机化)

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

一维数组的定义与引用(初学者)

VB程序设计,用随机函数产生10个50以内(包括50)的随机整数存入一维数组。求出最大值并和数组中的首个

c语言中一个一维数组怎样去重?