Java 决定结局的难题

Java 决定结局的难题,java,android,Java,Android,我试图检查一名球员是否不能再移动,但我似乎不知道如何检查。 假设我有5个或更少的瓷砖,每个瓷砖上的值介于1和3之间。我想浏览一下瓷砖,看看是否有任何可能的组合,加起来是10。这不像检查总数那么简单,因为可能有3块瓷砖上面有3个,一块上面有2个。我花了好几个小时想弄明白 关于如何检查所有可能的组合,有什么想法吗?我只需要看看一种组合是否可行。一旦找到一个,我就会打破循环,减少检查的次数 编辑:如果它有帮助,你可以看看我说什么,如果你下载它。安卓系统的数字是21 游戏的目标是将瓷砖添加到21。因此,

我试图检查一名球员是否不能再移动,但我似乎不知道如何检查。 假设我有5个或更少的瓷砖,每个瓷砖上的值介于1和3之间。我想浏览一下瓷砖,看看是否有任何可能的组合,加起来是10。这不像检查总数那么简单,因为可能有3块瓷砖上面有3个,一块上面有2个。我花了好几个小时想弄明白

关于如何检查所有可能的组合,有什么想法吗?我只需要看看一种组合是否可行。一旦找到一个,我就会打破循环,减少检查的次数

编辑:如果它有帮助,你可以看看我说什么,如果你下载它。安卓系统的数字是21

游戏的目标是将瓷砖添加到21。因此,当用户开始使用一些瓷砖时,有时即使所有瓷砖的总数超过21,也无法实现21的组合,因为这些数字加起来并不正好是21。这造成了一个问题,因为我无法检查并告诉用户他们丢失了

我真的不知道从哪里开始检查它。我可以在所有的瓷砖上循环多次,但这是一个组合,可以是板上的瓷砖数量。因此,我必须检查3、4、5等组合,直到达到剩余的瓷砖数量。我很难准确地解释这一点

更正编辑以供将来参考: 我为我最初的问题如此含糊不清而道歉。碰巧是我在这里问的第一个问题。。。这是对问题和解决方案的更好描述。我决定把前一段文字留作记录

游戏中有许多编号的磁贴,我想你必须将它们加起来21才能移除。你不能超过21岁。它必须是准确的

我想检查的是,是否仍然有一个组合的瓷砖,可以用来加起来正好21。一个基本的总和检查不起作用,因为你可能有5个数字5瓦片,并且超过21个,但不可能再消除了

解决方案 As@mellamokb回答需要使用子集和递归。基本上,您循环遍历这些分片,并在每个分片上调用相同的函数两次。一个调用添加当前磁贴,另一个调用继续到下一个迭代,而不添加当前磁贴。如果返回true,则函数为true。基本上是二叉树

代码

称之为

validate(tiles, 0, 0, 21)

这就差不多了。

这听起来像是。最简单的算法是O2^n,例如,通过使用位标志对每个可能的子集组合进行迭代

for i = 0 to 2^n - 1
    set subtotal = 0
    for each bit in i
        if bit i is set, add ith element to subtotal
    check subtotal against desired total (i.e., 10)
或者,也可以使用递归:

validate(set, index, subtotal, total)
    if index >= set.length return false;
    if subtotal == total return true;
    return validate(set, index + 1, subtotal + set[index], total) || 
           validate(set, index + 1, subtotal, total);
用法:

validate(set, 0, 0, 10);

我们需要更多的信息来帮助你……首先,你想实施什么游戏,游戏规则是什么?@Shane确保回答正确
validate(set, 0, 0, 10);