別人搶紅包,我們研究一下紅包演算法

xusir發表於2015-02-28
 public static void main(String[] args) {
        //紅包數
        int number = 10;
        //紅包總額
        float total = 100;
        float money;
        //最小紅包
        double min = 1;
        double max;
        int i = 1;
        List math = new ArrayList();
        DecimalFormat df = new DecimalFormat("###.##");
        while (i < number) {
            //保證即使一個紅包是最大的了,後面剩下的紅包,每個紅包也不會小於最小值
            max = total - min * (number - i);
            int k = (int)(number - i) / 2;
            //保證最後兩個人拿的紅包不超出剩餘紅包
            if (number - i <= 2) {
                k = number - i;
            }
            //最大的紅包限定的平均線上下
            max = max / k;
            //保證每個紅包大於最小值,又不會大於最大值
            money = (int) (min * 100 + Math.random() * (max * 100 - min * 100 + 1));
            money = (float)money / 100;
            //保留兩位小數
            money = Float.parseFloat(df.format(money));
            total=(int)(total*100 - money*100);
            total = total/100;
            math.add(money);
            System.out.println("第" + i + "個人拿到" + money + "剩下" + total);
            i++;
            //最後一個人拿走剩下的紅包
            if (i == number) {
                math.add(total);
                System.out.println("第" + i + "個人拿到" + total + "剩下0");
            }
        }
//取陣列中最大的一個值的索引
        System.out.println("本輪發紅包中第" + (math.indexOf(Collections.max(math)) + 1) + "個人手氣最佳");
    }

 部落格搬家,本文新地址:http://www.zicheng.net/article/2

相關文章