我们说我得到了这个数组:
int myArray[] = {2,5,8,3,2,1,9};
我能检查一些内容是否可以加起来20?我设法检查是否有任何两个值加起来为20,但我不知道如何处理它,如果与它需要多少值无关。
感谢您的帮助。
答案 0 :(得分:1)
大多数情况下,如果任何值的组合满足条件,则需要考虑使用递归。你通过元素和每个点分支两个方向:一个考虑那个元素,另一个不考虑。这可以被短路以停止查看其中一个分支是否满足该条件。
这是您问题的潜在解决方案
bool can_sum(const int* ptr, int size, int target, int total = 0)
{
// check success
if (total == target)
return true;
// check failure
if (total > target || size == 0)
return false;
return can_sum(ptr+1, size-1, target, total + *ptr) // check with *ptr
|| can_sum(ptr+1, size-1, target, total); // check without *ptr
}
int main()
{
int arr[] = {2,5,8,3,2,1,9};
bool result = can_sum(arr, 7, 20);
return 0;
}