fork(2) download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. int random_number(int N) // random value in [0, N)
  6. {
  7. static std::random_device seed;
  8. static std::mt19937 eng(seed());
  9. std::uniform_int_distribution<> dist(0, N - 1);
  10. return dist(eng);
  11. }
  12.  
  13. std::vector<int> random_sample(int first, int last, int n)
  14. {
  15. std::vector<int> numbers;
  16. int remaining = last - first + 1;
  17. int m = std::min(n, remaining);
  18. while (m > 0) {
  19. if (random_number(remaining) < m) {
  20. numbers.push_back(first);
  21. --m;
  22. }
  23. --remaining;
  24. ++first;
  25. }
  26. return numbers;
  27. }
  28.  
  29. int main()
  30. {
  31. auto numbers = random_sample(1, 100, 20);
  32. for (int value : numbers) {
  33. std::cout << value << " ";
  34. }
  35. std::cout << '\n';
  36. }
  37.  
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
9 12 13 23 25 35 43 47 48 54 56 64 65 71 73 76 85 88 95 100