在数组中创建实际的随机数据

标签 c arrays random

我一直在做一项作业,我必须在其中创建给定数量的数组并用随机数据填充它们。我想遵循的方法是我希望数组填充数据,只有一个百分比。问题是对于每个数组,随机值都在相同的位置,并且没有按我希望的方式散布。

我一直以这种方式创建数组:

int **array = malloc(DOC * sizeof *array);
for (i = 0; i < DOC; i++)
{
    array[i] = malloc(MAXWORDS * sizeof **array);
}

并使用 :

填充它们
srand((unsigned) time(&t));

for(i = 0; i < DOC; i++){
    for(j = 0; j < MAXWORDS; j++){
        array[i][rand() %percentage]=rand() %VALUE;
    }
}

在哪里

int percentage = rand() %MAXWORDS/10;

MAXWORDS 定义数组的长度 DOC数组的个数 VALUE 是最大随机值

As you can see the random values are all behaving identically. 我知道这与 srand 依赖时间生成数字的方式有关,而且程序的执行速度非常快,所以相似的数据是因为“相似”的时间。所以我要问的是在不同的日子生成随机值,或者我可以做一些技巧来以不同的方式填充数组。

最佳答案

如果使用“rand() % percentage”,您只能选择每个数组前 10% 的元素。相反,您可能想要这样的东西:

for (i = 0; i < DOC; ++i){
    for (j = 0; j < MAXWORDS; ++j) {
        if (rand() % 100 <= 10) {
            array[i][j] = rand() % VALUE;
        }
    }
}

这为数组中的每个元素提供了大约 10% 的初始化机会,这应该导致(对于足够大的数组)大约 10% 的元素被初始化。

如果您只想初始化数组的 10%,您可以改为执行一些操作,例如将所有索引 (0...j) 放入一个数组,随机化该数组,然后从用于初始化的随机数组。

关于在数组中创建实际的随机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096520/

相关文章:

java - 尝试搜索数组列表时类型不匹配

wordpress - 在 WordPress 中,如何在侧边栏小部件中显示自定义帖子类型的单个随机帖子?

c - 生成具有随机边的图

c - 将线程绑定(bind)到处理器

c - 试图在 C 字符串中将字符设置为 '\0' 的函数出现总线错误

c - 为 ARM 构建 Newlib 共享库

c - 我将如何设置函数来计算圆的面积 - C

python - 保存数组中每个时间戳之间的时间量

c++ - 我的方法不反转字符数组

c++ - 如何播种随机数生成器?