C++,在1-n的范围内生成m个不同的随机数
不知道怎么搜英文的解决。只好来这边问了
C++里面,想实现比如:
范围给定为1-25,然后要求生成5个随机数,那么可能的结果是:1,2,8,4,5,而不会是:5,4,3,5,5(出现多个同一数字)。
大天使泰瑞尔
10 years, 2 months ago
Answers
使用
shuffle
(C++11、C++14)或
random_shuffle
(C++98)来让包含 1 到 n 的数组随机排序,取前 m 个即可。
http://en.cppreference.com/w/cpp/algorithm/random_shuffle
下面的代码需要支持 C++11 的编译器才能编译。
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
int main() {
// assume m is 5 and n is 25.
int m = 5;
int n = 25;
// initialize numbers.
std::vector<int> v(n);
std::iota(v.begin(), v.end(), 1);
// do random shuffle.
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
// show first m numbers.
std::copy_n(v.begin(), m, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
return 0;
}
chaozzx
answered 10 years, 2 months ago