c# – 从他们位置的球员得分列表中找出最大可能总数

c# – 从他们位置的球员得分列表中找出最大可能总数,第1张

概述在给出球员名单的情况下,我如何找到最大可能的球队得分? 我维持一个社交幻想联盟(澳大利亚规则)网站,你可以在赛季开始时挑选18名球员,然后每周你选择一个由6名球员组成的球队,每个位置分配1名球员.您一周的得分是您选择的每个球员得分的总和.例如.如果每位球员得分为50,那么本周的球队得分将为300. 为了在本轮结束后分析您的团队,我想展示一些指标.第一个是每个职位的最高分,第二个是你本周的团队. 我 在给出球员名单的情况下,我如何找到最大可能的球队得分?

我维持一个社交幻想联盟(澳大利亚规则)网站,你可以在赛季开始时挑选18名球员,然后每周你选择一个由6名球员组成的球队,每个位置分配1名球员.您一周的得分是您选择的每个球员得分的总和.例如.如果每位球员得分为50,那么本周的球队得分将为300.

为了在本轮结束后分析您的团队,我想展示一些指标.第一个是每个职位的最高分,第二个是你本周的团队.

我可以找出每个位置中得分最高的分数(“球员得分列表”截图中的绿色突出显示).

foreach (var player in playerList.Where(p => p.Forward == playerList.Max(x => x.Forward) && p.Forward > 0)) { player.Forwardtopscore = true; }foreach (var player in playerList.Where(p => p.TallForward == playerList.Max(x => x.TallForward) && p.TallForward > 0)) { player.TallForwardtopscore = true; }foreach (var player in playerList.Where(p => p.Offensive == playerList.Max(x => x.Offensive) && p.Offensive > 0)) { player.Offensivetopscore = true; }foreach (var player in playerList.Where(p => p.Defensive == playerList.Max(x => x.Defensive) && p.Defensive> 0)) { player.Defensivetopscore = true; }foreach (var player in playerList.Where(p => p.OnBaller == playerList.Max(x => x.OnBaller) && p.OnBaller > 0)) { player.OnBallertopscore = true; }foreach (var player in playerList.Where(p => p.Ruck == playerList.Max(x => x.Ruck) && p.Ruck > 0)) { player.Rucktopscore = true; }

然而,弄清楚团队可能取得的最大可能得分比我想象的要困难得多.在那里,可以跨职位共享高分.此外 – 你可能选择的“最好的球队”可能并不意味着球员得分最高.

我为这个例子计算的最佳分数(即你可以在每个位置挑选的最佳6名球员)是288.通过将你在红​​色方框中突出显示的6个分数加起来你得到288.看看即使Josh Kennedy在“关闭”位置得到57分,你最好选择他在“FW”位置因为下一个最佳“FW”球员得分19(托比·格林)之间的差异为23.记住,你必须在回合开始之前将一名球员分配到1个位置,这样你每个球员只能得1分.

有什么建议?我如何编写一个循环/查询来提取玩家列表及其得分,以获得288的最佳团队得分?

只是为了获得更多信息,playerList是这样构建的,我稍后在一些获得统计数据的网络服务调用后添加实际分数(Kicks,Handballs等…)

List<Playerscore> playerList = new List<Playerscore>();foreach (var t in teams){    playerList.AddRange(t.TeamSelections.Where(x => x.DateInactive == null).OrderBy(x => x.Playername).Select(p => new Playerscore    {        TeamID = p.TeamID,Playername = p.Playername,Club = p.Club,ClubAbbreviation = Helper.Stats.GetClubAbbreviation(p.Club),TeamLeagueID = p.Team.LeagueID,TeamSelection = p.TeamSelectionID    }));}
解决方法 我不知道如何挑选球队的规则,但可能只有一名球员必须填补这六个角色中的每一个?

如果你没有太多的玩家(例如在上面的桌子上它可能会很好用),那么蛮力方法可以起作用.
然后,如果你有n个玩家,第一个有n个选择,第二个有n-1(因为你不能在两个不同的位置拥有相同的玩家),等等.这总共提供了nP6(falling factorial)种可能性.这是非常大的,n⁶的顺序.
如果你想实现这个,你可以快速而又脏,实现一个六深的循环(确保排除已经选择的玩家),检查分数,并跟踪最高的分数.

减少检查可能性的一种方法,我认为这是合理的:在位置X中仅从该位置的前6名选手中选择你的球员.直觉是这样的:如果我为其他位置选择(最佳或不是)5名球员,我不能选择所有六位最佳得分手来获得位置X!所以至少其中一个仍然可用.然后,我不能做比选择仍然离开的最好的人更好.所以我当然可以排除那些没有得分排名前六的位置的任何人.当有联系时可能会出现问题,在这种情况下,为了安全起见,请保留任何前6名职位的人.

这种方式(假设没有关系),你只需要搜索最多6个可能性(如果相同的玩家在不同的类别中获得前6名则更少).即使是大型列表,最初搜索前6名也是易于处理的.

可以使用liNQ完成任何或所有这些 *** 作,但不一定非必要.

总结

以上是内存溢出为你收集整理的c# – 从他们位置的球员得分列表中找出最大可能总数全部内容,希望文章能够帮你解决c# – 从他们位置的球员得分列表中找出最大可能总数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1232199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存