6s照片彻底删除了恢复:VB高手来帮我

来源:百度文库 编辑:高校问答 时间:2024/05/05 09:56:36
产生一个在[-50,-5]范围内的随机负整数(包含-50和-5)的表达式是___
请详细地给我讲下解这个题的思路.

rnd()产生的是0-1,包括0不包括1

[-50,-5] 相当于[-50,-4),注意开闭

-4-(-50) = 46

(46*rnd()) = [0,46)

-50+[0,46) = [-50,4)

所以答案是
-50+(46*rnd())

正确的答案应该是:
-(5+CInt(46*rnd()))

一楼关于0-45的随机数是正确的,但是用-50来加的时候,由于是赋值的时候VB才去自动取整的,因此整个表达式就变成了CInt(-50+(46*rnd()))。如果一楼的表达式改为-50+CInt(46*rnd()),那么结果也会是正确的。如果求的是一个正数的随机数,这两者是没有区别的,但是由于求的是负数,因此区别就会出现。

首先,我们先把[-5,-50]反过来,变成[5,50],最后生成[5,50]的随机数以后再加个负号就能得出结果了。这样做的好处是可以避免正负号取整带来的麻烦。

再把[5,50]变成5 + [0, 45]。楼上的朋友关于随机数是[0, 1)的说法是正确的,也就是说如果想生成[0,45]的随机数,要先生成[0, 46)的随机数,然后再取整。

因此,使用CInt(46*RND())获得的随机数将在[0, 45]范围内。最后,加5取负即为所求。