随机不重复数字生成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gease_Gg/article/details/88076902

Ques:0~n之间不重复随机数字

方法一

random_shuffle

//C++ 原生接口,思想是对0~n之前打乱顺序,即产生随机数字  
template <class RandomAccessIterator, class RandomNumberGenerator>
  void random_shuffle (RandomAccessIterator first, RandomAccessIterator last,
                       RandomNumberGenerator& gen)
{
  iterator_traits<RandomAccessIterator>::difference_type i, n;
  n = (last-first);
  for (i=n-1; i>0; --i) {
    swap (first[i],first[gen(i+1)]);
  }
}

方法二

//思想同样是对数组进行操作,结果保存在a中。将选中的数字用未被选中的数字换掉。
void gen_three_nums(vector<int>& a,int boundary){
    int start_array[boundary];
    for(int i=0;i<boundary;i++) start_array[i]=i;
    for(int i=0;i<3;i++){
        int index=rand()%(boundary-i);
        a.push_back(start_array[index]);
        start_array[index]=start_array[boundary-i-1];
    }
}

猜你喜欢

转载自blog.csdn.net/Gease_Gg/article/details/88076902