Python微信红包算法

转载自http://www.nonb.cn/blog/python-bonus.html

# -*- coding: utf-8 -*-

import random

import sys

def randBonus(min, max, total,num):

    print min, max, total, num

    #print "{:.2f}".format(3.1415029)

    total = float(total)

    num = int(num)

    min = 0.01

    

    if num < 1:

        return

    if num == 1:

        print "第%d个人拿到红包数:%.2f" % (num,total)

        return

    i = 1

    totalMoney = total

    while(i < num):

        max = totalMoney - min*(num- i)

        k = int((num-i)/2)

        if num -i <= 2:

            k = num -i

        max = max/k

        monney = random.randint(int(min*100), int(max*100))

        monney = float(monney)/100

        totalMoney = totalMoney - monney

        print "第%d个人拿到红包为:%.2f, 余额:%.2f"%(i,monney,totalMoney)

        i += 1

    print "第%d个人拿到红包为:%.2f, 余额:%.2f"%(i,totalMoney,0.00)

if __name__ == ‘__main__‘:

    min = sys.argv[1]

    max = sys.argv[2]

    total = sys.argv[3]

    num = sys.argv[4]

    randBonus(min, max, total, num)

执行结果如下:

[email protected] ~$ python bonus.py 0.01 10 20 10

0.01 10 20 10

第1个人拿到红包为:0.18, 余额:19.82

第2个人拿到红包为:2.05, 余额:17.77

第3个人拿到红包为:5.27, 余额:12.50

第4个人拿到红包为:0.90, 余额:11.60

第5个人拿到红包为:0.35, 余额:11.25

第6个人拿到红包为:1.77, 余额:9.48

第7个人拿到红包为:2.31, 余额:7.17

第8个人拿到红包为:0.75, 余额:6.42

第9个人拿到红包为:6.24, 余额:0.18

第10个人拿到红包为:0.18, 余额:0.00

时间: 2024-12-20 14:36:36

Python微信红包算法的相关文章

微信红包算法

微信红包有多种玩法,其中一种就是指定金额.人数(m),拆红包的人收到的金额是随机,收到的金额保留两位小数,至少有一分,所有人的红包加起来等于指定金额. 我想到一种做法就是:将指定金额放大100倍,也就是变成单位"分",这时金额就是整数了,设为n,从1到n这个整数区间随机抽取m(是人数)个整数,这样1到n的整数区间就分成了m或m+1(这种情况,最后的两个区间合成一个区间)个区间. 比如输入金额1.00元,人数m=3,n=100 * 1.从1到100之间随机选中的三个整数为15.42.88

微信红包算法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 impor

微信红包金额分配的算法 http://timyang.net/architecture/wechat-red-packet/

虽然春节已经过去一段时间,但不少微信群里面依旧乐此不疲的在玩发红包活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能. 用户在微信中抢红包时分成抢包和拆包两个操作.抢包决定红包是否还有剩余金额,但如果行动不够迅速,在拆包阶段可能红包已经被其他用户抢走的情况. 红包的金额是在什么时候算? 据某架构群腾讯财付通专家反馈,红包的金额是拆的时候实时计算,而不是预先分配,实时计算基于内存,不需要额外存储空间,并且实时计算效率也很高.每次拆红包时,系统取0.01到剩余平均值*2之间作为红包

微信红包随机算法

最近看了一篇文章,讲微信红包随机算法的.感觉很不错,所以自己实现了下,并进行了简单测试. 算法 算法很简单,不是提前算好,而是抢红包时计算: 红包里的金额怎么算?为什么出现各个红包金额相差很大?答:随机,额度在0.01和剩余平均值*2之间. 实现 实现上述算法的逻辑主要是: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_red

微信红包生成算法 (解)

/** * 微信红包生成算法 * * @param int $total 红包金额 * @param int $num 拆分数量 * @param int $min 拆分的红包最小金额数目 */function set_packet($total, $num, $min = 0.01){ for ($i = 1; $i < $num; $i++) { //随机安全上限 $safe_total = ($total-($num-$i)*$min)/($num-$i); //红包金额 $money =

PHP用抛物线的模型实现微信红包生成算法的程序源码

<?php /* *Author:Kermit *Time:2015-8-26 *Note:红包生成随机算法 */ header("Content-type:text/html;charset=utf-8"); date_default_timezone_set('PRC'); #红包生成的算法程序 class reward { public $rewardMoney; #红包金额.单位元 public $rewardNum; #红包数量 public $scatter; #分散

【转】微信红包随机算法初探

最近看了一篇文章,讲微信红包随机算法的.感觉很不错,所以自己实现了下,并进行了简单测试. 算法 算法很简单,不是提前算好,而是抢红包时计算: 红包里的金额怎么算?为什么出现各个红包金额相差很大?答:随机,额度在0.01和剩余平均值*2之间. 实现 实现上述算法的逻辑主要是: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_red

微信红包的随机算法

微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里 不过他们讨论的太过于深入,有掉坑之嫌. 我按照自己的逻辑尝试了下,这个算法需要满足以下几点要求 1.每个人都要能够领取到红包:2.每个人领取到的红包金额总和=总金额:3.每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味:4.算法一定要简单,不然对不起腾讯这个招牌: 正式编码之前,先搭建一个递进的模型来分析规律 设定总金额为10元,有N个人随机领取: N=1 则红包金额=X元

关于微信手气红包算法的探讨

关于微信手气红包算法的探讨 前言 这大过年的,长辈家人朋友发的红包抢到手软,嘿嘿嘿.昨晚,和一个朋友出去浪,刚好两人现在就读专业相同,不知不觉间就谈到了微信红包的算法.今天闲来无事,就简单的做了一下记录. 第一种 这个是最简单的实现,就是先给每个红包分配0.01(确保大家都有),然后各个红包轮流产生一个随机数(不得大于当前总金额)并从总金额中取出相应的数,最后一个红包不管如何,全盘接收总金额. 贴 java 代码: ```java /** * 最简单的分配方法,单位全部统一为 分 * @para