免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2321 | 回复: 16
打印 上一主题 下一主题

随机数 求点想法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-13 15:40 |只看该作者 |倒序浏览
 假如随机数取值在0-9,当第一次取了0后,接下来的9次不希望取到0,同理当第二次取到1后接下来的8次不希望取到1;
 程序不希望记录前面所有取得的随机数,最多记录最近一次取得的随机数,当进行完前面10次后,接下来的10次希望不重复前面的10次取值顺序,请教大家有什么好的思路或算法.

论坛徽章:
0
2 [报告]
发表于 2006-12-13 16:08 |只看该作者
不明白你说的什么记忆.

生成一个很长的随机数, 然后10位10位的进行操作, 如果有重复的就压缩成一个, 然后用 10 位和前面的 10 位进行对比, 重复了就丢弃.

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2006-12-13 16:33 |只看该作者
定义一数组,保存0-9,生成随机数把这数组内容随机掉换

论坛徽章:
0
4 [报告]
发表于 2006-12-13 17:58 |只看该作者
i = rand();
k = i;
while(1){
AGAIN:    i = rand();
               if(k == i ) goto AGAIN;
               else{
                        k = i;
                        printf("%d", i);
               }
}

论坛徽章:
0
5 [报告]
发表于 2006-12-13 19:52 |只看该作者
最多记录最近一次取得的随机数,这就难办了!

论坛徽章:
0
6 [报告]
发表于 2006-12-14 10:55 |只看该作者
这个问题难的地方是最多记录最近一次取得的随机数, 上面四位只有灰色骆驼 理解了我的意思, 其他三位都保存了之前取得的所有数,sithui 的代码只能保证最后一次出现的随机数在接下来的一次不出现,而不能保证下下一次不出现.
  如果保存之前所有出现的随机数,那对于算法是没有意义了,只是耗用内存来解决问题.如果一个程序同时向100万人提供他的随机数,用内存的方法消耗太大了,效率也低,所以想用一个好的算法.
  基本的想法是为每个请求随机数的人设一个种子,接下来的问题就是题目所示了,想不出来。。。。。。。。。。。。。
  请大家帮忙!!!!

论坛徽章:
0
7 [报告]
发表于 2006-12-14 11:06 |只看该作者
原帖由 week008 于 2006-12-14 10:55 发表
这个问题难的地方是最多记录最近一次取得的随机数, 上面四位只有灰色骆驼 理解了我的意思, 其他三位都保存了之前取得的所有数,sithui 的代码只能保证最后一次出现的随机数在接下来的一次不出现,而不能保证下下一次 ...


如果你能开发这种算法, 估计就能得图灵奖了...

我无法想象什么机器能在一瞬间为100万用户提供足够的响应时间...相信这样的computer..还见不到...

论坛徽章:
0
8 [报告]
发表于 2006-12-14 16:10 |只看该作者
原帖由 Edengundam 于 2006-12-14 11:06 发表


如果你能开发这种算法, 估计就能得图灵奖了...

我无法想象什么机器能在一瞬间为100万用户提供足够的响应时间...相信这样的computer..还见不到...


我说的是同时为100万用户提供服务,没有说一瞬间为100万用户提供服务,我要做的是在一个用户上他得到的随机数是不和他之前得到的是重复的,明白吗?

论坛徽章:
0
9 [报告]
发表于 2006-12-14 17:56 |只看该作者
哦,我没看仔细,见笑了
按楼主说的只在0-9  10个数字中取的话可以用一个10个元素的数组来记录,取完10个清空数组,这样系统开销不会很大

如果是在一个很大的区间要达到这样一个效果的话,真是不好办了

[ 本帖最后由 sithui 于 2006-12-14 17:58 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-12-14 19:23 |只看该作者
原帖由 week008 于 2006-12-14 16:10 发表


我说的是同时为100万用户提供服务,没有说一瞬间为100万用户提供服务,我要做的是在一个用户上他得到的随机数是不和他之前得到的是重复的,明白吗?



你直接生成好100万的数据, 来一个分配一个不就完了. 10! = 3628800, 容量足够.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP