游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1877|回复: 4

产生随机数数组有什么好的算法那?诚恳求教

[复制链接]

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-7-5 17:19:00 | 显示全部楼层 |阅读模式
呵呵,我是初学者,我有个问题,如何产生一个一维数组,array[n]
里面的数值是从0~n随机分布的,但不重复。

请问有什么好的算法吗?

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20527
发表于 2004-7-5 17:24:00 | 显示全部楼层

Re:产生随机数数组有什么好的算法那?诚恳求教

// 随机数生成器。
long Random( int nMax )
{
    return rand() * nMax / RAND_MAX;
}

69

主题

335

帖子

343

积分

中级会员

Rank: 3Rank: 3

积分
343
QQ
发表于 2004-7-5 20:39:00 | 显示全部楼层

Re:产生随机数数组有什么好的算法那?诚恳求教

这个简单,首先a[100]  a[0]-a[99]里初始化0~99
然后
for (int i=0;i<100;i++)
{
     随机选一个数组编号(rand()%100),把里面的数和数组a里的数字交换
}
完了

例如:
第1个  rand()出来是43,那么把a[43]和a[0]交换
第2个  rand()出来是22,那么把a[22]和a[1]交换
第3个  rand()出来是74,那么把a[74]和a[2]交换
第4个  rand()出来是43,那么把a[43]和a[3]交换 //这里不会重复,因为第1次已经把a[43]的数据变成a[0]里的了

19

主题

202

帖子

214

积分

中级会员

Rank: 3Rank: 3

积分
214
QQ
发表于 2004-7-5 22:05:00 | 显示全部楼层

Re:产生随机数数组有什么好的算法那?诚恳求教

一般情况下,我们得到的随机数都是伪随机数,会以一定几率重复出现

常用方法可以用srand(::GetTickCount()); 按系统时间取种子

还有一种方法就是 从硬件噪音中提取随机种子,不过不适合游戏程序

折中的办法可以从硬盘或者OS中任意提取数据作为种子

这样得到的随机数基本是能满足游戏需要的

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2004-7-6 10:54:00 | 显示全部楼层

Re: Re:产生随机数数组有什么好的算法那?诚恳求教

thinbug: Re:产生随机数数组有什么好的算法那?诚恳求教

这个简单,首先a[100]  a[0]-a[99]里初始化0~99
然后
for (int i=0;i<100;i++)
{
     随机选一个数...


谢谢thinbug大哥的方法:)的确很简单易行。
也感谢楼上各位的回复,对我帮助真的很大,谢谢^_^
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-5 13:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表