c++ - C++ 中的 rand() 函数

标签 c++ c

我不太清楚这个函数在 C++ 中是如何工作的:

int rand_0toN1(int n) {
    return rand() % n;
}

互联网上的另一个教程说要获得一个范围内的随机数,您需要做一些不同的事情,但是,a 是范围内的第一个数字,n 是范围内的项数:

int number = a + rand( ) % n;

我读到它应该返回一个介于 0 和 n-1 之间的随机数,但它是如何做到的?我知道 % 的意思是除以余数(所以 5 % 2 就是 1),但是最终如何给出 0 到 n-1 之间的数字呢?感谢您帮助理解这一点。我想我不明白 rand() 函数返回什么。

最佳答案

除以 n> 0 的模数(余数)始终在 [0, n] 范围内;这是模运算的基本属性。

a + rand() % n 不会返回 [0, n) 范围内的数字,除非 a=0;它返回 [a, n + a 范围内的 int

请注意,此技巧不会通常返回 uniformly distributed integers .

关于c++ - C++ 中的 rand() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571357/

相关文章:

c - 分隔字符串并按词法排序

c++ - 堆、栈和数据内存单元的大小

c++ - 设计用于标记和传输树的 C++ DSL

C++ : How to use SocketAppender of log4cplus to send logs to logstash server?

c++ - 导入命名空间和导入全局命名空间的 C 函数之间发生冲突

c - Wunused-but-set-variable警告处理

C 到硬件编译器(HLL 综合)

c - Valgrind:大小 1 的读/写无效

c++ - 使用基于动态/状态的分配器的 STL 实现?

c++ - C++ 中的二维数组归零。我需要 2 个 for 循环吗?