标题:输出10个不重复数
只看楼主
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
(int)(rand()/(1.0+RAND_MAX)*101); 跟(int)(101.0*rand()/(RAND_MAX+1.0));的意思是一样的吗?
------ 有点儿差别,前者不会溢出,且可能的误差更小。

BTW:
要想生成不重复数,最佳的办法就是洗牌算法,可以参考一下C++的 std::shuffle。
你的方法最大的问题是 --- 它不是计算机算法 --- 因为有很大几率一次rand就获得了新数,有较小几率需要两次,有更较小几率需要三次,有……。即使放宽到一亿次,它的概率也不是0。即,它不能保证在有限步骤内完成。

如果你觉得洗牌算法需要一个很大的记录区,而你需要的数据又比较少,那可以只记录已经获得了的随机数,下次遇到相同随机数,则顺次取后面未被获取的数。
比如 1 2 3 4 7 11 已经被获取过了,现在又来了个2,那就顺次取后面未被获取的数 5。
2019-04-15 17:01
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
得分:0 
回复 11楼 rjsp
谢谢你,那我之后还是用前者吧
2019-04-15 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494129-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.507039 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved