| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14935 人关注过本帖, 2 人收藏
标题:如何随机产生不重复的数
取消只看楼主 加入收藏
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
结帖率:100%
收藏(2)
已结贴  问题点数:10 回复次数:7 
如何随机产生不重复的数
比如说:我要产生20100以内的随机数且互不重复,怎么实现?百度了一下,没找到什么好的方法,不知坛子里的高人有什么妙招?要求:1:数字不能重复;2:不要使用比较;3:辅助空间尽可能地小------不用当然更好了.
搜索更多相关主题的帖子: 随机 
2009-10-13 09:24
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
楼上几位都没理解我的意思,我说的是产生的随机数序列里不能有相同的数!
2009-10-13 14:42
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
目前我能搜到的网上最好的办法是:先产生一个有序序列A[m],这个序列中的每一个数值都等于它的数组下标,然后设置一个循环for(i=0;i<m;i++),在这个循环体内产生一个不大于m的随机数n,将A[i]与A[n]交换...,这种方法不需要进行比较,也不需要额外的辅助空间,可惜它也有一个缺点:即数组的取值范围就是其下标的取值范围,如产生100个数都在100以内,产生20个数则都在20以内,不能做到产生20个100以内的(不重复)数.静候大虾出手......
2009-10-13 15:02
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
谢谢各位不吝指教!UserYuH的算法简单明了,很容易让人接受,不足之处是使用的辅助空间较大,也许我只需要10或20个数,程序却非得另开一个100个元素的数组,有点太浪费了,另外,如果我需要的是20个任意大小但互不雷同的数怎么办? 广陵绝唱的代码没看太懂(不好意思,我太菜了),num数组中的所有元素应该都等于200吧?if(num[n]==200)这条判断语句岂不是永恒成立?它到底起什么作用?还有,能麻烦你解释一下printf("%2d%c",num[n]=n,++i%5?' ':'\n');这条语句吗?再次感谢两位!

[ 本帖最后由 lrongh 于 2009-10-13 22:39 编辑 ]
2009-10-13 22:35
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
哦,明白了,原理一样,都是在已知数组中做个标记,以防重复。printf里面还能写语句,又学了一招。
2009-10-13 22:53
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
不知还有没有更好的办法能同时满足我提的三个要求?
2009-10-13 22:55
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
明白了,非常感谢!真是个热心的人!
2009-10-14 10:15
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
哪位兄弟能给个基数排序的C源码吗?内部排序就差它了。。。
2009-10-14 12:20
快速回复:如何随机产生不重复的数
数据加载中...
 
   



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

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