c ++中的rand()函数

Dan*_*atz 1 c c++

我不太确定c ++中的这个函数是如何工作的:

int rand_0toN1(int n) {
    return rand() % n;
}
Run Code Online (Sandbox Code Playgroud)

互联网上的另一个教程说要在你需要做一些不同的范围之间得到一个随机数,但是在范围内是第一个数字,n是范围内的项数:

int number = a + rand( ) % n;
Run Code Online (Sandbox Code Playgroud)

我已阅读,它应该返回0,n-1和值之间的随机数,但它是如何做到这一点?我知道%表示除法并给出余数(因此5%2将是1)但是如何最终给出0到n-1之间的数字?感谢您帮助理解这一点.我想我不明白rand()函数返回什么.

Fre*_*Foo 6

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

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

请注意,此技巧通常不会返回均匀分布的整数.