zoukankan      html  css  js  c++  java
  • 微信红包算法TEST

    1、基本算法

    设定总金额为10元,有N个人随机领取:
    N=1
    则红包金额=X元;

    N=2
    为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数
    第二个红包=10-第一个红包金额;

    N=3
    红包1=0.01至0.98之间的某个随机数
    红包2=0.01至(10-红包1-0.01)的某个随机数
    红包3=10-红包1-红包2

    ……

    2、java代码

     1 package Demo_1.Test_1;
     2 
     3 import java.math.BigDecimal;
     4 import java.util.Random;
     5 
     6 /**
     7  * @描述:微信红包算法TEST
     8  * @author BrokenColor
     9  * @date 2017年3月2日上午11:27:36
    10  */
    11 public class WeixinHB {
    12 
    13     double TOTAL = 10;//红包总金额
    14     int NUM = 8;//抢红包人数
    15     double MIN = 0.01;//每人最少分的金额
    16     double safe_total ;
    17     double money ;
    18     Random rand = new Random();
    19     public void calculation(){
    20         for (int i = 1; i < NUM; i++) {
    21             
    22             safe_total = (TOTAL-(NUM-i)*MIN)/(NUM-i);//计算安全上限
    23             
    24             money = rand.nextDouble()*(safe_total-MIN)+MIN;
    25             
    26             money =(double)Math.round(money*100)/100;//保留两位小数
    27             
    28             //直接相减会有double数据类型相减的问题
    29             TOTAL = this.sub(TOTAL, money);
    30             
    31             System.out.println("第"+i+"次红包:"+money+"元,剩余:"+TOTAL+"元");
    32         }
    33         System.out.println("第"+NUM+"次红包:"+TOTAL+"元,剩余:0元");
    34     }
    35     //double 数相减
    36      public double sub(double d1,double d2){ 
    37          BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
    38          BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
    39          return bd1.subtract(bd2).doubleValue(); 
    40      } 
    41     
    42     public static void main(String[] args) {
    43         // TODO Auto-generated method stub
    44         WeixinHB hb = new WeixinHB();
    45         hb.calculation();
    46     }
    47 
    48 }

    结果:

    第1次红包:1.38元,剩余:8.62元
    第2次红包:1.11元,剩余:7.51元
    第3次红包:1.14元,剩余:6.37元
    第4次红包:0.31元,剩余:6.06元
    第5次红包:1.52元,剩余:4.54元
    第6次红包:0.93元,剩余:3.61元
    第7次红包:2.34元,剩余:1.27元
    第8次红包:1.27元,剩余:0元

     如有错误,望指出!

    仅做笔记,如有错误之处,望指出
  • 相关阅读:
    MySQL8.0设置远程访问权限
    MySQL创建用户与授权
    input lable水平对齐
    jquery datagrid加载后仅选定第一行
    jquery隐藏按钮
    C# 添加excel批注
    在ashx中使用Server对象
    jquery 获取datagrid行数
    弹出窗体中加载页面
    【MySQL】MySQL零碎积累
  • 原文地址:https://www.cnblogs.com/brokencolor/p/6490181.html
Copyright © 2011-2022 走看看