@@ -86,7 +86,7 @@ private static double powCore(double base, int exponent) {
86
86
return result ;
87
87
}
88
88
89
- private static boolean doubleEqual (double one , double two ) {
89
+ public static boolean doubleEqual (double one , double two ) {
90
90
return Math .abs (one - two ) < 0.0000001 ;
91
91
}
92
92
@@ -404,6 +404,7 @@ private static boolean checkUnique(int[] arr, int ele) {
404
404
405
405
/**
406
406
* 在一个排好序的int数组中查找连续子数组其和为指定的值。
407
+ *
407
408
* @param arr
408
409
* @param value
409
410
* @return
@@ -432,4 +433,68 @@ public static List<Tuple2<Integer, Integer>> findSumInOrder(int[] arr, int value
432
433
}
433
434
return result ;
434
435
}
436
+
437
+ /**
438
+ * 从投色子问题来,一个色子有6个面,丢n个色子和的每种可能性和概率
439
+ *
440
+ * @param n
441
+ * @param max
442
+ * @return
443
+ */
444
+ public static double [] probability (int n , int max ) {
445
+ Preconditions .checkArgument (n >= 1 );
446
+ Preconditions .checkArgument (max > 0 );
447
+
448
+ int [] sum_count = probabilitySumCount (n , max );
449
+ double sum = Math .round (pow (max , n ));
450
+ double [] result = new double [sum_count .length ];
451
+ for (int i = 0 ; i < sum_count .length ; i ++) {
452
+ result [i ] = sum_count [i ] / sum ;
453
+ }
454
+ return result ;
455
+ }
456
+
457
+ public static int [] probabilitySumCount (int n , int max ) {
458
+ Preconditions .checkArgument (n<
8000
/span> >= 1 );
459
+ Preconditions .checkArgument (max > 0 );
460
+
461
+ int [] result = new int [n * max + 1 ];
462
+ int [] result_tmp = new int [result .length ];
463
+ for (int i = 1 ; i <= max ; i ++) {
464
+ result_tmp [i ] = 1 ;
465
+ result [i ] = 1 ;
466
+ }
467
+
468
+ for (int i = 1 ; i < n ; i ++) {
469
+ for (int j = 1 ; j < result_tmp .length ; j ++) {
470
+ result [j ] = 0 ;
471
+ for (int k = 1 ; k <= max && k < j ; k ++) {
472
+ result [j ] += result_tmp [j - k ];
473
+ }
474
+ }
475
+
476
+ int [] tmp = result_tmp ;
477
+ result_tmp = result ;
478
+ result = tmp ;
479
+ }
480
+ return result_tmp ;
481
+ }
482
+
483
+ public static double sum (double [] arr ) {
484
+ Preconditions .checkNotNull (arr );
485
+ double result = 0 ;
486
+ for (double num : arr ) {
487
+ result += num ;
488
+ }
489
+ return result ;
490
+ }
491
+
492
+ public static int sum (int [] arr ) {
493
+ Preconditions .checkNotNull (arr );
494
+ int result = 0 ;
495
+ for (double num : arr ) {
496
+ result += num ;
497
+ }
498
+ return result ;
499
+ }
435
500
}
0 commit comments