主题:如何随机产生n个随机数,
chenminxia
[专家分:0] 发布于 2010-12-15 22:30:00
如何随机产生n个从0到n的随机不重复整数啊
回复列表 (共5个回复)
沙发
chenhui1111 [专家分:190] 发布于 2010-12-16 10:16:00
可以去http://bbs.pfan.cn/post-357086.html看下
板凳
耶路撒冷 [专家分:650] 发布于 2010-12-16 19:51:00
又是这个问题,洗牌算法
3 楼
wengyulin [专家分:20] 发布于 2010-12-16 20:41:00
在c++中rand表示【0,1】随机数 你可以控条件 在用rand*10或100什么的。。得到、、、
4 楼
chenminxia [专家分:0] 发布于 2010-12-16 21:53:00
就是那个洗牌算法 呵呵
5 楼
Chipset [专家分:16190] 发布于 2010-12-17 12:47:00
不要用C的rand,它的随机性太差。任何伪随机数产生器都不能保证始终不重复,想不重复需要做点处理。下面这个速度很慢,原理简单。
inline void swap(int& a, int& b)
{
int t = a;
a = b;
b = t;
}
#include <ctime>
#include <iostream>
#include <cstdlib>
// rand() is in the range of [0, 32768)
int main()
{
// in the range of [0, 100)
const int M = 100;
int* arr = new int[M];
std::srand(std::time(0));
for(int i = 0; i < M; ++i)
arr[i] = i;
for(int i = 0; i < M; ++i)
swap(arr[std::rand()%M], arr[std::rand()%M]);
for(int i = 0; i < M; ++i)
std::cout << arr[i] << ' ';
delete [] arr;
}
如果你不需要保证一定不重复(偶尔有个重复的是允许的),可以考虑使用MT19937
我来回复