fork download
  1. // kadai2-2.cpp
  2. // ex) plot "???.txt" w boxes
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. //ランダムウォークのステップ数
  8. const int STEPS = 1000;
  9.  
  10. const int RANDOMS = 1000; //生成する乱数の個数
  11. const int LOWER_LIMIT = 0; //ヒストグラムの下限と
  12. const int UPPER_LIMIT = 10; //上限
  13. const int DIVISION = 10; //分割数(1の幅をDIVISION等分)
  14. const int HIST_MAX = (UPPER_LIMIT - LOWER_LIMIT) * DIVISION + 1;
  15.  
  16. //0以上1未満の一様乱数を生成する
  17. double frand()
  18. {
  19. return rand() / (RAND_MAX+1.0);
  20. }
  21.  
  22. int main()
  23. {
  24. double y;
  25. int i, step, h;
  26.  
  27. //乱数を初期化する
  28. srand((unsigned int)time(NULL));
  29.  
  30. //頻度を記録する配列、0で初期化
  31. int hist[HIST_MAX] = {0};
  32.  
  33. for (i = 0; i < RANDOMS; i++) {
  34. //STEPSステップのランダムウォークを実施する
  35. y = 1.0;
  36. for (step = 0; step < STEPS; step++) {
  37. y = y * (0.9 + 0.2 * frand());
  38. }
  39. h = (int)(y * DIVISION);
  40. if (h < HIST_MAX) {
  41. hist[h]++;
  42. }
  43. }
  44. for (h = 0; h < HIST_MAX; h++) {
  45. printf("%4.1f %d\n", h / (double)DIVISION, hist[h]);
  46. }
  47.  
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0.05s 2680KB
stdin
Standard input is empty
stdout
 0.0 384
 0.1 155
 0.2 76
 0.3 57
 0.4 43
 0.5 35
 0.6 26
 0.7 22
 0.8 17
 0.9 11
 1.0 12
 1.1 11
 1.2 17
 1.3 3
 1.4 10
 1.5 6
 1.6 5
 1.7 6
 1.8 5
 1.9 1
 2.0 5
 2.1 3
 2.2 2
 2.3 3
 2.4 2
 2.5 2
 2.6 5
 2.7 3
 2.8 2
 2.9 2
 3.0 4
 3.1 2
 3.2 1
 3.3 1
 3.4 1
 3.5 1
 3.6 2
 3.7 2
 3.8 4
 3.9 1
 4.0 2
 4.1 1
 4.2 0
 4.3 0
 4.4 1
 4.5 1
 4.6 0
 4.7 1
 4.8 3
 4.9 3
 5.0 1
 5.1 0
 5.2 0
 5.3 1
 5.4 0
 5.5 0
 5.6 1
 5.7 0
 5.8 1
 5.9 0
 6.0 2
 6.1 1
 6.2 0
 6.3 1
 6.4 0
 6.5 0
 6.6 1
 6.7 1
 6.8 2
 6.9 1
 7.0 1
 7.1 0
 7.2 0
 7.3 2
 7.4 1
 7.5 0
 7.6 0
 7.7 0
 7.8 0
 7.9 0
 8.0 0
 8.1 0
 8.2 0
 8.3 0
 8.4 0
 8.5 1
 8.6 1
 8.7 0
 8.8 0
 8.9 0
 9.0 0
 9.1 0
 9.2 1
 9.3 0
 9.4 0
 9.5 0
 9.6 0
 9.7 0
 9.8 0
 9.9 1
10.0 0