我的程序有什么方法可以制作任何给定大小的子集?

问题描述

帮助那里的程序员我遇到一个问题

special-background-class

如果我得到与用户输入(con)匹配的结果,则必须制作数组的子集并将其单独添加({1,2} = 1 + 2),输出将为YES或NO。现在我面临的问题是我不知道如果用户输入的数组大小为4,那么用户输入将给出多少大小,将需要4个循环。我的子程序在任何大小的数组上都能工作吗 p.s:对不起,我的英语不好

解决方法

这是递归实现函数的简单示例:

bool Check(int *arr,int size,int con,int curr_sum = 0)
{       
    for (int i = 0; i < size; i++)
    {
        int new_sum = curr_sum + arr[i];
        if (new_sum == con
            || Check(arr + i,size - i,con,new_sum))
        {
            return true;
        }
    }
    return false;
}

这是它的工作原理...

我们传递了一个curr_sum参数,该参数保存了父递归的总和。当前的递归将通过向其添加所有索引来寻找curr_sum + arr[i] == con。如果不是,那么我们将采用新的总和(curr_sum + arr[i]),并从当前正在查看的索引开始,对索引进行另一轮递归。

注意::这是您正在使用的O(n ^ 2)实现,因此随着您的使用,它会非常慢(并且由于这是递归操作,容易导致堆栈溢出)处理更大的数组。