生成不超过某个数的,不重复的10个随机数

发布于 2022-09-01 13:07:55 字数 214 浏览 19 评论 0

这个所谓的某个数是必定大于10的x
也就是生成10个在区间[0, x)内的随机整数
而且这10个随机数不重复

虽然有想到个笨拙的方法
就是每次生成随机数都放到数组中
然后下次生成就取数组中对比,没有则放入,有则重新生成
如此反复
但是这感觉不是一个好实现啊

求指教
最好来个objective-c的实现
思路也可以

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

触ぅ动初心 2022-09-08 13:07:55

创建一个set集合

set[] = rand(0,x)
while(set.length < 10)
    set[] = rand(0,x)
end

就是这样.

柳若烟 2022-09-08 13:07:55

第一反应是类似洗牌算法,只不过不把整副牌洗掉,而是洗到第10张就停止

此刻的回忆 2022-09-08 13:07:55

先生成10个数放到数组中,然后去重,然后缺几个就再生成几个,然后去重,递归进行,应该比每次生成1个对比一次效率高一些。我再看看。
下面这个解法还是不错的 :
依次考虑整数 0,1,2,……,n-1,按序访问整数
设m=2, n=5,那么选择第一个整数0的概率就是2/5,这种确定概率,通过 if (rand()%5) < 2 来判断是否选取该数字,然后判断是否选择整数1,若0被选中,以 1/4 的概率选择1, 若0未被选中,以 2/4 的概率选择1,…… ,总之,对于从r个剩余整数中选s个,以 s/r 来选择下一个数。

傲鸠 2022-09-08 13:07:55

编程珠玑中有一段 等概率从n个数选取不重复的m个数,一次成型,解法忘了,可以上网上搜索下,非常巧妙。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文