| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3207 人关注过本帖
标题:输出10个不重复数
只看楼主 加入收藏
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册: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
快速回复:输出10个不重复数
数据加载中...
 
   



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

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