@@ -86,7 +86,7 @@ private static double powCore(double base, int exponent) {
8686 return result ;
8787 }
8888
89- private static boolean doubleEqual (double one , double two ) {
89+ public static boolean doubleEqual (double one , double two ) {
9090 return Math .abs (one - two ) < 0.0000001 ;
9191 }
9292
@@ -404,6 +404,7 @@ private static boolean checkUnique(int[] arr, int ele) {
404404
405405 /**
406406 * 在一个排好序的int数组中查找连续子数组其和为指定的值。
407+ *
407408 * @param arr
408409 * @param value
409410 * @return
@@ -432,4 +433,68 @@ public static List<Tuple2<Integer, Integer>> findSumInOrder(int[] arr, int value
432433 }
433434 return result ;
434435 }
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 >= 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+ }
435500}
0 commit comments