首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无重复的复数排列

无重复的复数排列
EN

Stack Overflow用户
提问于 2012-01-16 01:57:43
回答 1查看 584关注 0票数 2

我正在尝试创建一个名为怪物猎人(个人使用)的游戏的工具。我以前处理过排列,但没有这么复杂的,所以我完全卡住了。

在游戏中,你穿着5件装甲。每件作品都有许多不同技能中的一种的技能点。如果在计算整个集合后,您在特定技能中有10+技能点数,则您将获得该技能。

示例:

代码语言:javascript
复制
Foo Head: Attack +2, Guard + 2
Foo Chest: Defense + 5    
Foo Body: Guard + 2, Attack + 5, Defense +2
Foo Arm: Attack + 3, Speed + 4
Foo Legs: Attack + 5, Guard + 6, Defense + 3

The above set would result in 10+ in Attack, Defense, and Guard (not speed).

我想知道如何找到2-3个用户指定技能的装甲碎片的所有组合。所以如果你选择了“攻击”和“速度”,它会给你5件护甲的所有可能的组合,这将导致“攻击”和“速度”的+10。这5个类别中的每一个都有大约60个不同的项目。

我知道我可以使用LINQ来过滤5类装甲部件中的每一类,这样我就只能得到包含2个指定技能之一的所有物品的列表,但我迷失了如何进行排列,因为我正在处理2-3个用户指定的技能……

我希望我有可以展示的工作代码,但是我在这一点上太迷茫了,我不知道从哪里开始。我不是在寻找答案,而是在寻找如何实现这一目标的建议。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-01-16 02:31:44

1)我会尝试只查找1个技能,然后为第二个/第三个技能筛选该项目集

2)为了避免占用太多的时间/内存/递归:我会根据唯一的技能对5* 60个项目进行排序。然后,我会通过寻找那些加起来超过10的组合来创建组合,从较高的技能开始,当达到10或无法达到10时停止。

构建所有组合的函数将如下所示:1:如果我们有总项目技能>10 :所有与其他项目的组合都可以。停。2:如果当前物品技能计数小于10,则在数组中查找未磨损的下一个最大物品。

如果在数组中我们达到0或者我们达到一个值(当前计数+值*剩余块类型的数量) <10,那么是时候停止了:-)

否则,添加它的技能计数,记录使用的护甲类型,然后为所有可能匹配的物品调用你的函数。

好吧,我可能不够精确,但你可以看到这个想法:为调用使用条件,以避免爆炸递归性。因为60*60*60*60*60太多了。并且(快速地)对5*60=300项进行排序并不是什么事。

要存储您的组合,您可能想要添加'anything goes‘的情况,以避免存储/计算太多无用的组合。(例如:如果你有Carmak的魔法帽,你的编码+100,你可以穿任何你想穿的衣服,虫子会染的!:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8871952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档