回 帖 发 新 帖 刷新版面

主题:如何随机产生n个随机数,

如何随机产生n个从0到n的随机不重复整数啊

回复列表 (共5个回复)

沙发

可以去http://bbs.pfan.cn/post-357086.html看下

板凳

又是这个问题,洗牌算法

3 楼

在c++中rand表示【0,1】随机数  你可以控条件 在用rand*10或100什么的。。得到、、、

4 楼


就是那个洗牌算法  呵呵

5 楼

不要用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

我来回复

您尚未登录,请登录后再回复。点此登录或注册