gpt4 book ai didi

c - 生成具有特定约束的随机位模式

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:55 26 4
gpt4 key购买 nike

我想生成 0 和 1 的随机流(10000 次迭代),条件是 1 应该只出现在 400 次迭代中的一次。任何人都可以帮我解决它的 C 代码和要使用的库和函数在 C 中。

最佳答案

这里有一个解决方案,它预先从 400 的间隔中选择一个命中,并在轮到它时报告它;否则它会发出 0。当报告命中时,下一个间隔的命中由 rand() 确定。 .函数保持其状态为 static变量并使用特殊值 -1 来初始化自身:

int pick(int n)
{
return 400 * rand() / ((double) RAND_MAX + 1);
}

int next()
{
static int hit = -1;
static int count;

if (hit < 0) hit = pick(WIDTH);
if (count++ == hit) {
hit = ((hit / WIDTH) + 1) * WIDTH + pick(WIDTH);
return 1;
}

return 0;
}

你可以这样调用它:

for (i = 0; i < 10000; i++) {
printf("%8d %d\n", i, next());
}

这与 Bathsheba 的解决方案不同,因为如果您的样本是 400 的倍数,它保证 1:399 的分布。这意味着它可能不是您要找的。

编辑 我引入了一个新函数 pick选择一个介于 0(含)和 n 之间的随机数(独占),有望提供比模函数更好的分布。

关于c - 生成具有特定约束的随机位模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24137713/

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