fork(1) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. //num[0]=1になる確率
  13. double sum = 0.0;
  14. //num[0]よりあとの位置をいくつ辿るか?
  15. for(int i = 1; i <= 9; i++){
  16. /**
  17. * num[1]~num[9]の9つの位置からi個選び,その位置が小さい方から
  18. * 順番に移動する確率
  19. * 例えば値1を番号0→3→6→0と移動する場合,
  20. * 0番を入れ替え対象としている時に乱数で3を引いて入れ替える(1/10)
  21. * 3番を入れ替え対象としている時に乱数で6を引いて入れ替える(1/10)
  22. * 6番を入れ替え対象としている時に乱数で0を引いて入れ替える(1/10)
  23. * それ以外の時は値1がある場所を選ばないようにする(9/10の7乗)
  24. * これをすべて掛けあわせ,更に9個の位置からi個の位置を選ぶ
  25. * 選び方のパターン数を掛けたものが求める確率の一部となる
  26. */
  27. double prob = Math.pow(0.1, i + 1) * Math.pow(0.9, 9 - i);
  28. sum += combination(9, i) * prob;
  29. }
  30. System.out.println(sum);
  31. //0番の時に0番と入れ替わり,それ以降入れ替わらない確率を加える
  32. sum += 0.1 * Math.pow(0.9, 9);
  33. System.out.println("num[0] = 1となる確率 " + sum);
  34.  
  35. //num[0]=2になる確率
  36. sum = 0.0;
  37. for(int i = 1; i <= 8; i++){
  38. //上と同じ.ただし,値2より大きな位置が8箇所であることに注意
  39. double prob = Math.pow(0.1, i + 1) * Math.pow(0.9, 9 - i);
  40. sum += combination(8, i) * prob;
  41. }
  42. System.out.println(sum);
  43. //0番対象の時に1番が選ばれる確率と,1番対象の時に0番が選ばれる確率
  44. sum += 2 * 0.1 * Math.pow(0.9, 9);
  45. System.out.println("num[0] = 2となる確率 " + sum);
  46. }
  47.  
  48. public static int combination (int n, int r){
  49. if(r > n / 2) r = n - r;
  50. int comb = 1, div = 1;
  51. for(int i = 0; i < r; i++){
  52. comb *= n - i;
  53. div *= r - i;
  54. }
  55. return comb / div;
  56. }
  57. }
Success #stdin #stdout 0.11s 320256KB
stdin
Standard input is empty
stdout
0.06125795110000003
num[0] = 1となる確率 0.10000000000000003
0.05125795110000002
num[0] = 2となる確率 0.12874204890000004