C ++如何检查数组内容是否可以添加到特定数字

时间:2016-05-26 21:10:36

标签: c++ arrays

我们说我得到了这个数组:

int myArray[] = {2,5,8,3,2,1,9};

我能检查一些内容是否可以加起来20?我设法检查是否有任何两个值加起来为20,但我不知道如何处理它,如果与它需要多少值无关。

感谢您的帮助。

1 个答案:

答案 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;
}