gpt4 book ai didi

c - C 中无重复的随机数数组

转载 作者:行者123 更新时间:2023-11-30 17:12:23 26 4
gpt4 key购买 nike

我正在尝试使用以下方法创建不重复的随机整数数组生成器:

int pt_rand(int nbits) {
int mask;
if (0 < nbits && nbits < sizeof(int)*8) {
mask = ~(~((unsigned int) 0) << nbits);
}
else {
mask = ~((unsigned int) 0);
}
return rand() & mask;
}

int *gen_rand_int_array_nodups(int length, int nbits) {
int * a = malloc(sizeof(int)*length);
for (int i = 0; i < length; i++) {
a[i] = pt_rand(nbits);
for (int j = 0; j < i; j++) {
do {
a[i] = pt_rand(nbits);
} while (a[i] == a[j]);
}
}
shuffle_int_array(a, length);
return a;
}

这段代码试图通过一一检查元素来在给定的 nbits 内生成唯一的随机整数。然而,我仍然在结果中得到重复的结果,但我还没有弄清楚为什么。我知道使用此方法生成唯一随机数是一种不好的做法,但我的作业要求要求我以某种方式利用 nbits 参数。我已经找到了实现同一件事的最简单方法,即用增量数字填充数组并交换它们,但这只是一个替代解决方案,我仍然必须确认是否允许我使用它。

最佳答案

    for (int j = 0; j < i; j++) {
do {
a[i] = pt_rand(nbits);
} while (a[i] == a[j]);
}

i=3j=1a={5,2,3,2}。现在您检测到您已经拥有 2 ...所以说 pt_rand() 现在为您提供 5 。如何检测您已经拥有 5

更正版本:

int *gen_rand_int_array_nodups(int length, int nbits) {
int * a = malloc(sizeof(int)*length);
for (int i = 0; i < length; i++) {
int duplicate;
do
{
duplicate = 0;
a[i] = pt_rand(nbits);
for (int j = 0; j < i; j++) {
if (a[j] == a[i])
{
duplicate = 1;
break;
}
}
} while (duplicate);
}
shuffle_int_array(a, length);
return a;
}

关于c - C 中无重复的随机数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com