我正在编写一个乐透模拟器,其中的代码为中奖号码和1000名玩家从45个数字中生成6个随机唯一的数字,这两个数字都存储为列表
我想做的是计算每个部门的获奖人数
因此,如果所有6个中奖号码都等于玩家的6个号码,那么是1区,如果6个中奖号码中的任何5个号码等于玩家的6个号码中的5个号码,那么是2区,如果6个中奖号码中的任何4个号码等于玩家的6个号码中的4个号码,那么是3区,依此类推
目前我的代码只查找第1部分,不计算找到6/6匹配项(如果有的话)的次数。这就是我陷入困境的地方,我如何做到这一点,同时还需要找到匹配的5/6,4/6,3/6
我使用二进制搜索算法来比较中奖号码和玩家拥有的号码
winNum = [37, 10, 36, 26, 19, 43]
lotto = [[5, 19, 21, 24, 30, 38], [10, 11, 15, 24, 32, 34], ...]
# Calculates the total number of winners for each division.
def totalWinners():
target = winNum
search = binarySearch
i = 0
for i in range(len(lotto)):
found = search(target, lotto, 0, len(lotto)-1)
if found == -1:
print(lotto[i])
print("search unsuccessful...")
#Binary search algorithm.
def binarySearch (target, p, left, right):
l = left
r = right
while l <= r:
f = (l+r)//2
if target == p[f]:
return f
elif target < p[f]:
r = f - 1
else:
l = f + 1
return -1
谢谢你的帮助
对sets来说,这似乎是一份更好的工作。您可以免费获得更简单有效的交叉口计算
它告诉你条目所在的“部门”。以最适合你的总体目标的方式来处理它
显然,如果您能够控制
winNum
和lotto
元素的生成方式,那么首先从集合开始会更有效相关问题 更多 >
编程相关推荐