• Java 写一个随机的砍价方法,返回砍价金额的数组,第一刀最大


    public class BargainUtils {
    
        private static final int DEF_DIV_SCALE = 10;
    
        /**
         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
         *
         * @param v1
         *            被除数
         * @param v2
         *            除数
         * @param scale
         *            表示表示需要精确到小数点以后几位。
         * @return 两个参数的商
         */
    
        public static double div(double v1, double v2, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        /**
         * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
         *
         * @param v1
         *            被除数
         * @param v2
         *            除数
         * @return 两个参数的商
         */
        public static double div(double v1, double v2) {
            return div(v1, v2, DEF_DIV_SCALE);
        }
    
    
        /**
         * 提供精确的小数位四舍五入处理。
         *
         * @param v
         *            需要四舍五入的数字
         * @param scale
         *            小数点后保留几位
         * @return 四舍五入后的结果
         */
        public static double round(double v, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b = new BigDecimal(Double.toString(v));
            BigDecimal one = new BigDecimal("1");
            return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        
        /**
         * 生成每次砍价能砍多少
         * @param p 砍价次数
         * @param m 总砍价金额
         * @return
         */
        public static Object[] buildPriceArr(int p ,double m) {
    
            double minMoney = div (Math.random () * 9, 100);
            double d = div (2 * (m - p * minMoney), p * (p - 1), 3);
            double total = 0;
            double tem;
            Object[] arr = new Object[p];
            for (int i = 0; i < p; i++) {
                if (m - total <= 0) {
                    break;
                }
                tem = round (minMoney + (p - i - 1) * d, 2);
                arr[i] = tem;
            }
            handel (arr, 0);
            double totalPre = 0.0;
            for (int i = 0; i < arr.length; i++) {
                if(i!=arr.length-1){
                    totalPre+=(double)arr[i];
                }
            }
            arr[arr.length-1] = round(m-totalPre,2);
            return arr;
        }
    
        private static void handel(Object[] arr, int low) {
            int start = low;
            double b = div (Math.random () * 9, 100);
            double tem;
            for (int i = start; i < arr.length; i++) {
                tem = (Double)arr[i];
                if (tem > 0.1) {
                    arr[low] = round ((Double) arr[low] + tem * b, 2);
                    arr[i] = round (tem - tem * b, 2);
                }
            }
            low += 3;
            if (arr.length > low && (Double)arr[low] >= 0.1) {
                handel (arr, low);
            }
        }
    
        public static void main(String[] args) {
            String arrStr = Arrays.toString(BargainUtils.buildPriceArr(10,450));
            System.out.println(arrStr);
        }
    
    }
  • 相关阅读:
    平衡的括号(栈)
    二叉树遍历
    Ohana Cleans Up0101
    Missing number
    Django框架之模板层
    Django框架之路由层、视图层
    Django框架
    Django初识
    前端之bootstrap
    前端之BOM、DOM
  • 原文地址:https://www.cnblogs.com/cg-take/p/13232673.html
Copyright © 2020-2023  润新知