fork download
  1. // 乱数を使ってみよう
  2. // ポイント1.srand関数で乱数を初期化する
  3. // 初期化しないと、毎回同じ乱数列を取得してしまいます。
  4. // ポイント2.rand関数で擬似乱数を取得する
  5. // rand()関数の戻り値が擬似乱数なので、お好きなように
  6. // ポイント3.余りを求める事で、乱数の範囲を自分の好みに調整できます
  7. // rand() % 6; // サイコロ風 0 ~ 5
  8. // rand() % 100; // 百分率 0 ~ 99
  9. // rand() % 80 + 20; // 20 ~ 99 半端な範囲を求める時は、余りを求めて少し数字を足します
  10. // rand() % 24; // 手持ちの24個の駒から、ランダムに動かす駒を決めたりもできます
  11. // if (rand() % 100 < 20) { ... } // 20%の確率で発生するイベントの管理
  12. // if (rand() % 100 < x) { ... } // 確率x(0 ~ 100%)で発生するイベントの管理
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <time.h>
  17. #include <limits.h>
  18.  
  19. int main(void) {
  20. int i, r, x, c;
  21. // ポイント1.srand関数で乱数を初期化する
  22. srand(time(NULL ));
  23.  
  24. // ポイント2.rand関数で擬似乱数を取得する
  25. // 無加工 0~RAND_MAX
  26. printf("無加工 0~%d\n", RAND_MAX);
  27. for (i = 0; i < 10; i++) {
  28. r = rand();
  29. printf("%d, ", rand());
  30. }
  31. printf("\n\n");
  32.  
  33. // ポイント3.余りを求める事で、乱数の範囲を自分の好みに調整できます
  34. // rand() % 6; // サイコロ風 0 ~ 5
  35. printf("サイコロ風 0~5\n");
  36. for (i = 0; i < 10; i++) {
  37. r = rand() % 6;
  38. printf("%d, ", r);
  39. }
  40. printf("\n\n");
  41.  
  42. // rand() % 100; // 百分率 0 ~ 99
  43. printf("100分率 0~99\n");
  44. for (i = 0; i < 10; i++) {
  45. r = rand() % 100;
  46. printf("%d, ", r);
  47. }
  48. printf("\n\n");
  49.  
  50. // rand() % 80 + 20; // 20 ~ 99 半端な範囲を求める時は、余りを求めて少し数字を足します
  51. printf("半端な範囲 20~99\n");
  52. for (i = 0; i < 10; i++) {
  53. r = rand() % 70 + 20;
  54. printf("%d, ", r);
  55. }
  56. printf("\n\n");
  57.  
  58. // rand() % 24; // 手持ちの24個の駒から、ランダムに動かす駒を決めたりもできます
  59. for (i = 0; i < 3; i++) {
  60. r = rand() % 24;
  61. printf("%d番の駒を動かします\n", r);
  62. }
  63. printf("\n");
  64.  
  65. // if (rand() % 100 < 20) { ... } // 20%の確率で発生するイベントの管理
  66. printf("20%%の確率で発生するイベントです。\n");
  67. c = 0;
  68. for (i = 0; i < 100; i++) {
  69. if (rand() % 100 < 20) {
  70. printf("!");
  71. c++;
  72. }
  73. }
  74. printf("\n100回中%d回イベントが発生しました。\n\n", c);
  75.  
  76. // if (rand() % 100 < x) { ... } // 確率x(0 ~ 100%)で発生するイベントの管理
  77. x = rand() % 100;
  78. c = 0;
  79. printf("%d%%の確率で発生するイベントです。\n", x);
  80. for (i = 0; i < 100; i++) {
  81. if (rand() % 100 < x) {
  82. printf("!");
  83. c++;
  84. }
  85. }
  86. printf("\n100回中%d回イベントが発生しました。\n\n", c);
  87.  
  88. return EXIT_SUCCESS;
  89. }
  90.  
Success #stdin #stdout 0.01s 1676KB
stdin
Standard input is empty
stdout
無加工 0~2147483647
1637195378, 1712932808, 585138002, 944662766, 861186343, 924748841, 1615196783, 156287876, 281320575, 1671351530, 

サイコロ風 0~5
4, 3, 4, 0, 0, 0, 1, 3, 5, 3, 

100分率 0~99
23, 88, 37, 81, 48, 80, 35, 79, 46, 62, 

半端な範囲 20~99
42, 73, 85, 63, 68, 77, 59, 52, 44, 34, 

19番の駒を動かします
18番の駒を動かします
8番の駒を動かします

20%の確率で発生するイベントです。
!!!!!!!!!!!!!!!!!!!
100回中19回イベントが発生しました。

97%の確率で発生するイベントです。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
100回中96回イベントが発生しました。