我想选择一个随机数,并以彩票系统的格式表示该数字。例如,彩票系统有7组2位数字,从01到40,总可能组合为163,840,000,000(40到7次方)。如果我选择一个随机的基数为10的数字,比如说453,867,221,我如何在01-40的7组2位数字中表示?
我选择的编程语言是Python,尽管任何语言/伪语言都会有所帮助。
答案 0 :(得分:7)
标准库的random.sample
从群体中选择n个值而无需替换:
>>> import random
>>> ' '.join('{:02d}'.format(n) for n in random.sample(xrange(1,41),7))
'25 19 15 09 01 26 06'
但这正是你所要求的,包括重复数字的可能性:
import random
def display(n):
for _ in range(7):
d,n = n % 40 + 1, n // 40
print '{:02d}'.format(d),
print
display(0) # test lower limit
display(40**7-1) # test upper limit
display(random.randint(0,40**7-1))
结果:
01 01 01 01 01 01 01
40 40 40 40 40 40 40
18 23 27 14 23 31 38
答案 1 :(得分:5)
所以你有40个基数,7个40基“数字”。将它们转换为整数是相对简单的(我使用显式循环来使事情更清晰):
digits = [12, 5, 39, 1, 40, 8, 17]
total = 0
for digit in digits:
total = total * 40 + (digit-1)
转换回来恰恰相反:
total = ...
digits = []
while total > 0:
digits = [(total % 40 + 1)] + digits
total = total / 40