我已经开始了一个小项目,试图学习一些新概念(希望是用C或Python),而我只是希望在我的构想开始时能有所帮助.
*这都与一个更大的幻想篮球项目有关,但是我必须从某个地方开始.
我想要100个变量(玩家)并找到10个的每个组合,这满足了另一个条件.
例如;我有100个玩家,我想找出10个有多少组合(没有重复,顺序无关紧要(所以ABC == CBA))将组合为某个值(10个之间为170点)或更高.
我假设有一个Python库可以为我工作(我很想知道)这种魔术,但实际上,我对如何使用C进行此操作更感兴趣.
感谢您的任何答复.
解决方法:
这是一些伪代码
function player_combos(array players, int minimum_total) {
array result = []
players = sort(players, metric=most points first)
int total = 0
for p1 in 0 .. length(players) {
if players[p1].points*10 < minimum_total - total:
break
total += players[p1].points
for p2 in p1+1 .. length(players) {
if players[p2].points*9 < minimum_total - total:
break
total += players[p2].points
for p3 in p2+1 .. length(players) {
if players[p3].points*8 < minimum_total - total:
break
total += players[p3].points
# continue these nested loops up to p10
...
for p10 in p9+1 .. length(players):
if players[p10].points < mininum_total - total:
break
# this is a valid combination
result.append((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10))
...
# remember to decrement total when we finish a loop iteration
total -= players[p3].points
}
total -= players[p2].points
}
total -= players[p1].points
}
return result
}
这里的想法是因为在循环播放列表中的球员时,您首先要对球员进行排序,所以之后的所有球员的总分必须等于或低于当前球员的总分.如果当前玩家的点数乘以团队中剩余的点数少于达到最低点数所需的点数,则可以使您脱离当前循环.
例如,假设您到目前为止在团队中有四名球员,总共80分,这意味着您还剩下90分才能达到最低要求,而剩下6分.下一个玩家可以拥有的绝对最小分数是15(因为90/6 == 15),因此一旦您到达下一个循环中拥有14个或更少分数的玩家,就可以退出该循环.
只要您的minimum_total指标设置得足够高,这就会大大减少您需要获得的组合总数.
标签:python,c-4,algorithm 来源: https://codeday.me/bug/20191201/2082291.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。