fork(1) download
  1. #include <iostream>
  2. #include <random>
  3. #include <cstdint>
  4. #include <tuple>
  5. #include <algorithm>
  6.  
  7.  
  8. // 計算機以外の実行を禁ずる。
  9. std::size_t DoOne(std::size_t N, std::size_t C) {
  10. std::size_t V = 0;
  11. std::size_t Re = N;
  12. std::size_t T = 0;
  13.  
  14. std::random_device rd;
  15. std::mt19937 mt(rd());
  16. //std::mt19937 mt;
  17. std::uniform_int_distribution<std::size_t> UI(1, 10);
  18. do {
  19. N = Re;
  20. Re = 0;
  21. T = 0;
  22. for (std::size_t i = 0; i < N; i++) {
  23. T = std::max(T,UI(mt));
  24.  
  25. if (T >= C) { Re++; }
  26.  
  27. }
  28. V += T;
  29. }while(Re != 0);
  30.  
  31. return V;
  32. }
  33.  
  34. int main() {
  35. std::uintmax_t V = 0;
  36.  
  37. std::size_t DiceCount = 10;
  38. std::size_t NumberLimit = 5;
  39. std::size_t L = 900000;
  40. std::size_t Min = 11*DiceCount;
  41. std::size_t Max = 0;
  42. for (std::size_t i = 0; i < L; i++) {
  43. std::size_t T = DoOne(DiceCount, NumberLimit);
  44. V += T;
  45. Min = std::min(Min, T);
  46. Max = std::max(Max, T);
  47.  
  48. }
  49.  
  50. std::cout << "Do " << L << " count." << std::endl;
  51. std::cout << "Min:" << Min << ',' << "Max:" << Max << std::endl;
  52. std::cout << "Average:" << V / (double)L << std::endl;
  53.  
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 4.98s 4392KB
stdin
Standard input is empty
stdout
Do 900000 count.
Min:3,Max:497
Average:135.943