题目:
1 红包算法 2 1.输入是人数,总金额。输出是每个人的金额 3 2.多人红包,最大的不得超过总额的80%
代码:
1 # @Author :whyCai 2 # @Time :2021/3/4 22:15 3 4 ''' 5 红包算法,输入是人数,总金额。输出是每个人的红包金额,拿的最多的人应有标示。 6 额外要求:多人红包下,拿的最多的人,不得超过总额的80%. 7 ''' 8 import random 9 10 def getRed(money,num,maxNum=0.8,min=0.01,switch=1): 11 ''' 12 求随机数 13 :param money: 总金额 14 :param num: 人数 15 :param maxNum: 个人最大值的系数(总金额的百分比) 16 :param min: 最小值 17 :param switch: 1:随机数 第一个人获得大的金额数概率较大 其他:最大值按照 剩余金额/(剩余人数/2)的方式取值 18 :return: 19 ''' 20 money = round(float(money),2) 21 max = money * maxNum 22 num = int(num) 23 if num == 1: 24 print('总人数:{num},红包金额:{money}'.format(num=num,money=money)) 25 26 total = money 27 if num > 1: 28 for i in range(num): 29 if i != num-1: 30 ranMax = int(max*100-(num-i-1)*min*100) 31 if switch !=1: 32 mid = 2 if num - i -1 < 2 else int((num - i - 1)/2) 33 ranMax = round(ranMax/mid) 34 ranRed = random.randint(min*100, ranMax) 35 ranRedFloat = float(ranRed/100) 36 total = round((total - ranRedFloat),2) 37 if total < max: 38 max = total 39 else: 40 ranRedFloat = total 41 total = 0 42 print('总人数:{num},第{n}个人的红包金额:{money},剩余红包金额:{moneyOther}'.format(num=num, n=i+1,money=ranRedFloat,moneyOther=total)) 43 getRed(100,10,0.8,0.01,2)