Python 发红包算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#算法一
思路
sum =0
amount=500分 count=4个人抢
1 - 500-(4-1-0) -0 i = 0
1. 1 - 1-497 num = 400
sum = sum + num 0+400
1 - 500-(4-1-1) -400
2. 1 - 82 num = 50
sum = sum + num 400 +50
1- 500 -(4-1-2) -450
3. 1 - 49 num =49
sum = sum+49=491
amount -sum 1 / 100
#################################################################
def hongbao(amount=5, count=3):
s = []
sum = 0 #分
amount = amount * 100 #单位分
for i in range(count-1): #0 1 2
max = amount -sum - (count - 1 - i) # 单位分 500-(3-1-0)=498
num = random.randint(1, max) #1,498 400
s.append((num / 100))
sum = sum + num
s.append((amount - sum) / 100)
random.shuffle(s)
return s

print(hongbao(5, 4))
##############################################################

算法二
#############################################################
# 0--------------------------------20
# 0 2 4 10 16 20

def hongbao(amount=10, count=5):
ret = random.sample(range(1, amount * 100), count - 1) #分为单位
ret.extend([0, amount * 100]) #追加多个值0 amount * 100
ret.sort() #排序
# return [((ret[i+1] - ret[i]) / 100 for i in range(num))] # 列表生产式
for i in range(count):
yield (ret[i+1] - ret[i]) / 100

res = hongbao(10, 6)
for i in res:
print(i)