其实这个问题可以归纳为:
Find all possible combinations from a given set of elements, which meets a certain criteria.
那么,有什么好的算法吗?
最佳答案
只有 16 种可能性(其中一种是将“它们都没有”加在一起,这不会给你 24),所以老式的“蛮力”算法对我来说看起来很不错:
for (unsigned int choice = 1; choice < 16; ++choice) {
int sum = 0;
if (choice & 1) sum += elements[0];
if (choice & 2) sum += elements[1];
if (choice & 4) sum += elements[2];
if (choice & 8) sum += elements[3];
if (sum == 24) {
// we have a winner
}
}
在您的问题的完全一般形式中,判断组合是否满足“特定标准”的唯一方法是评估每个组合的这些标准。鉴于有关标准的更多信息,也许您可以想出一些方法来避免测试每个组合并相应地构建算法,但不能没有这些细节。再次重申,蛮力为王。
关于algorithm - 从 4 个输入数字中找出所有可能的组合,这些数字加起来为 24,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10613753/