zoukankan      html  css  js  c++  java
  • java实现红包的分配算法

    个人推测,微信红包在发出的时候已经分配好金额。比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额。

    而不是在领取的时候才计算的。下面贴出实现方法:

       public static void main(String[] args) {
       // 输入总金额
    double amt = 66.66;
    // 输入红包个数
    int luckPackage = 12;
    // 总下标数
    int allIndex = (int)(amt * 100);
    // 根据红包金额和红包个数创建下标集合
    List<Integer> list = new ArrayList();
    // 默认添加最小下标
    list.add(0);
    // 默认添加最大下标
    list.add(allIndex);
    // 根据红包个数,获取各个下标
    while(list.size() < luckPackage + 1){
    Random rnd = new Random();
    int r = rnd.nextInt(allIndex);
    // 避免下标重复
    if(list.contains(r)){
    continue;
    }
    // 添加下标
    list.add(r);
    }
    // 从小到大排序
    Collections.sort(list);
    // 红包集合
    List<Integer> lpAmtList = new ArrayList<>();
    for(int i=0; i<list.size()-1; i++ ){
    // 每个红包金额 = 相邻下标值的差
    int lpAmt = list.get(i+1) - list.get(i);
    // 添加红包金额
    lpAmtList.add(lpAmt);
    }
    // 红包金额
    System.out.println(lpAmtList);
    // 运气王
    System.out.println("本轮中第" +( lpAmtList.indexOf(Collections.max(lpAmtList)) + 1) + "人手气最佳");
    }
  • 相关阅读:
    2017ecjtu-summer training #4 CodeForces 731C
    HDU 1232 并查集
    2017ecjtu-summer training #3 POJ3264
    2017ecjtu-summer training #4 UESTC 30
    斑羚飞渡 贪心
    Codeforces Round #565 (Div. 3) D. Recover it!
    P3398 仓鼠找sugar lca
    P3146 [USACO16OPEN]248 dp
    P1955 [NOI2015]程序自动分析 离散化
    P2949 [USACO09OPEN]工作调度Work Scheduling 贪心
  • 原文地址:https://www.cnblogs.com/zhengsc/p/8568943.html
Copyright © 2011-2022 走看看