采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
(rangeR-rangeL+1)+rangeL 不就是rangeL到rangeR吗? 不太明白rand()%后面那个什么意思啊
rangeR, rangeL都是具体的数,(rangeR-rangeL+1)+rangeL 得到的结果,也是一个具体的数。
rand()%返回一个0到INT_MAX之间的随机数。所以rand()%(rangeR-rangeL+1) 得到的就是一个0到rangeR-rangeL之间的随机数,rand()%(rangeR-rangeL+1)+rangeL得到的就是rangeL到rangeR之间的随机数:)
老师好,我不太明白为什么要 + 1,比如: rand()%生成的随机数是10 rangeL 为5 rangeR 为8 所以我们的目标就是生成一个范围是 [5,8]的随机数 但是10 %(8-5+1) 得到的是2 然后再 +5 得到的是7,确实是在[5,8]之间 然后我试了几个数,均是如此 我的困惑是不知道为什么加 1 有点钻牛角尖啦~
[5, 8] 之间一共有4个数字,5,6,7,8。[L, R]之间一共有 R - L + 1 个数字。想想看?:)
谢谢波波老师,我明白了! 我再写一遍加深一遍印象,也可以给后面的同学看。 函数的目的是生成 闭区间 [rangeL, rangeR] 之间的随机数 // 但我们一般只能生成 [0,N]之间的随机数 // 所以就采取迂回策略 // 1.先生成 [0, rangeR - rangeL]之间的随机数 (这里要注意 随机数 % M 即可生成 [0,M-1]之间的随机数,这是取余函数的性质,所以我们才要对 rangeR-rangeL+1 取余) // 2.再加一个偏置 rangeL, 即可变为[rangeL, rangeR] 之间的随机数了
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.8k 21
5.7k 3
4.9k 5
1.4k 18