fork download
  1. #include <random>
  2. #include <array>
  3. #include <iostream>
  4.  
  5. int RollADice1(const std::array<int, 6>& chances) {
  6. static std::random_device rd; //Will be used to obtain a seed for the random number engine
  7. static std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
  8. static std::uniform_int_distribution<int> distrib(0, *chances.crbegin());
  9.  
  10. auto roll = distrib(gen);
  11.  
  12. for(int i=0; i < chances.size(); ++i) {
  13. if (roll <= chances[i]) {
  14. return i;
  15. }
  16. }
  17. return chances.size() - 1;
  18. }
  19.  
  20. int main() {
  21. constexpr std::array<int, 6> chances {
  22. 100,
  23. 100,
  24. 200,
  25. 100,
  26. 100,
  27. 600
  28. };
  29.  
  30. std::array<int, 6> partial_sums{};
  31. int prev{};
  32. for(int i=0; i < partial_sums.size(); ++i) {
  33. partial_sums[i] = chances[i] + prev;
  34. prev = partial_sums[i];
  35. }
  36.  
  37. std::array<int, 6> arr{};
  38.  
  39. for(int i=0; i < 120'000; ++i) {
  40. ++arr.at(RollADice1(partial_sums));
  41. }
  42.  
  43. for(int i=0; i < arr.size(); ++i) {
  44. std::cout << i << ' ' << arr[i] << '\n';
  45. }
  46.  
  47. std::cout << "Sum: " << std::accumulate(arr.begin(), arr.end(), 0) << '\n';
  48. }
Success #stdin #stdout 0.01s 5440KB
stdin
Standard input is empty
stdout
0 10147
1 9907
2 19975
3 10118
4 10103
5 59750
Sum: 120000