首页 > 其他 > 详细

等概论生成某范围内的数

时间:2021-09-06 07:51:02      阅读:19      评论:0      收藏:0      [点我收藏+]

(randX() - 1)*Y + randY() 可以等概率的生成[1, X * Y]范围的随机数

 

利用此方法,再加上一些限定就可以生成指定范围的随机数(等概率):

例如:利用Rand(7)生成Rand(10)

       由于只能利用Rand(7),所以此时x,y都取7,只有这样才能保证等概率。

       (rand7()?1)?7+rand7()    可以等概率生成范围在【1,49】的数。

   下面利用此范围生成【1,10】的数:

       1.直接舍去大于10的其他数,一旦大于10,就继续循环生成,直到符合要求。

       2.舍去大于40的9个数,剩下的1到40,全部看做【1,10】,利用  1 + num % 10

       3.进一步减少舍弃的数,因为舍弃数越多,涉及到while循环就越多,可以利用  (40?40?1)?7+rand7(得到63个数,只需舍弃3个数;

     再次减少,对于舍弃的三个数,利用上述公式,生成【1,21】,只需舍弃一个数。

 

 

等概论生成某范围内的数

原文:https://www.cnblogs.com/averyfork/p/15229294.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!