c - 1 到 3 之间的随机数

标签 c random

如何生成 1 到 3 之间的随机数? 使用这个函数我有时会得到 0(我只想有 1,2 或 3):

ziehen=rand() % 3 + 1;

为什么我必须在主程序中添加 srand(0) ? 我已经添加了

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

去图书馆。这足够了还是我需要更多?

最佳答案

您绝对不能使用模数来减少 rand() 输出的周期性。原因?这是因为标准线性同余生成器的低阶位的随机性低于高阶位:模数会丢弃高阶位。

最好的办法是使用(3.0 * rand()/(RAND_MAX + 1.0)) + 1.0;。通过将输出分配给整型来隐式将其转换为 int

RAND_MAX 由 C 标准定义,其值取决于实现

关于c - 1 到 3 之间的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127800/

相关文章:

c++ - C - 通过引用传递数组 - 仅第一个元素集

c - 检测到堆栈粉碎

c++ - 使用 printf 打印 size_t 的正确方法是什么?

python - 我可以创建本地 numpy 随机种子吗?

循环遍历带有全局计数器的 C 数组

c - 优化一个简单的 pinball 求解器

java - 如何在java中生成唯一的数字ID并进行计数?

java随机字符串生成和生日悖论

c++ - 如何正确实现 "operator()"和 "if constexpr"以便它与 std::generate 一起使用?

python - 生成没有上限的随机整数