如何找到给定数组中总和为“N”的所有匹配数字

2024-02-27

我的目标是找到所有可能的组合,总和达到给定的总数。 例如,如果数组是 2 59 3 43 5 9 8 62 10 4 如果总数为 12,则可能的组合为

2 10
3 9
8 4
5 3 4

这是我编写的第一组代码。想知道对此可以进行的最佳改进。

   int find_numbers_matching_sum(int *number_coll, int total)
{

    int *search_till = lower_bound(number_coll,number_coll+TOTAL_SIZE, total);
    int location = search_till - number_coll;
    if (*search_till > total && location > 0 )
    {
        --location;
    }

    while ( location >= 0 )
    {
        find_totals(number_coll,total,location);
        --location;
    }
    return 1;
}

int find_totals(int *number_coll, int total, int end_location)
{
    int left_ones = total - number_coll[end_location];
    int curloc = end_location;
    int *search_till = 0;
    int location ;
    int all_numbers[10];
    int i = 0;

    all_numbers[i] = number_coll[end_location];
    while ( left_ones && curloc >= 0 )
    {
        search_till = lower_bound(number_coll,number_coll+end_location, left_ones);
        location = search_till - number_coll;
        if (*search_till > left_ones && location > 0 )
        {
            --location;
        }
        else if ( left_ones < *search_till )
        {
            break;
        }
        curloc=location;
        left_ones = left_ones - number_coll[curloc];
        all_numbers[++i] = number_coll[curloc];
        end_location = curloc - 1;
    }

    if ( !left_ones )
    {
        while ( i>=0)
        {
            cout << all_numbers[i--] << ' ';
        }
    }
    cout << endl;
    return 1;


}

您描述的问题也称为子集和问题 http://en.wikipedia.org/wiki/Subset_sum_problem这是NP完全 http://en.wikipedia.org/wiki/NP-Complete。您可以实现的最好结果是指数时间算法,该算法会尝试数组/集合的所有可能子集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到给定数组中总和为“N”的所有匹配数字 的相关文章

随机推荐

  • 在vim中显示尾随空格

    我在 vimrc 中设置了以下选项 set listchars tab trail set list 并期望在代码中使用空格进行制表的那些地方看到点 我使用空格 而不是制表符 然而 结果却不同 您能否建议如何达到预期的结果 谢谢 你应该检查
  • 从列表中选择随机值,直到它们在Python中消失

    使用 Python 我想从列表中随机选择人员 并将他们分成 5 人一组 而不是多次选择同一个人 人们由两个标准定义 年龄和性别 人员名单如下所示 PPL 1 4 6 2 5 5 3 7 3 4 2 8 5 4 6 其中每个列表中的 3 个数
  • Google Shopping REST API 按类别限制

    我正在尝试按类别限制 Google 购物请求 在这种情况下 我只希望返回实际的电影 DVD 蓝光 这是我要传递的内容 其中 MY KEY 是我从以下位置获得的密钥 https code google com apis console pro
  • 如何更改用于指示已在 TabHost 上选择选项卡的颜色?

    在安卓上TabHost layout 当用户选择一个选项卡时 选项卡的颜色会暂时改变 如何禁用此颜色更改 或指定选项卡更改为的颜色 UPDATED 我没有制作自己的示例并因此而获得荣誉 而是找到了我的旧书签教程 如何更改 Android 选
  • liquibase.properties 中的 Liquibase 变更日志参数

    根据文档 参数值按以下顺序查找 作为参数传递给 Liquibase 运行程序 有关如何传递它们的信息 请参阅 Ant command line 等文档 作为 JVM 系统属性 在 DatabaseChangeLog 文件本身的参数块 Tag
  • 上传时转换视频[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想在用户上传视频时将其转换 例如从 wmv 格式转换为 flv 我可以转换视频或单独上传 但如何立即执行这些操作 我使用 ffmpeg 进行转换 例
  • 如何创建一个简单的谷歌地图地址搜索并在flutter中自动完成并获取纬度和经度?

    我是 Flutter 的新手 我正在尝试构建一个简单的谷歌地图应用程序 我已经在应用程序中实现了谷歌地图 并且运行完美 但现在我想添加谷歌地图自动完成功能 但我找不到专注于它的简单教程或示例 我有一个文本字段 我想根据用户输入的内容显示其下
  • Facebook 以页面管理员身份发布页面提要

    var message test var picture http l yimg com f i tw ks show 120604 mntl01 jpg var link https www youtube com watch v BIl
  • ReactJS:当输入元素进入 DOM 时如何将焦点设置到输入元素?

    如何将焦点设置到input元素进入 DOM 时 Scenario 单击按钮时 将显示输入元素 如何将焦点设置到该元素 代码片段 class Component extends React Component constructor prop
  • 错误处理仅有效一次

    我有一个非常简单的 VBA 代码 应该尝试打开一个不存在的文件 将我发送到错误处理程序 然后以无限循环返回到我的代码 故意 但是 编译器仅在第一次捕获错误 然后在第二次传递时中断 我已经尝试了 On Error 语句的每种组合以在第二次传递
  • 如何增加 QListWidget 中项目/行的填充(或边距)?

    我们正在寻找一种方法来增加填充 或边距 QListWidget我们正在我们的应用程序中使用 我们希望为所有四个方向增加此值 以便为列表中的文本提供一些额外的空间 我查看了两者的文档QListWidget http doc qt io qt
  • 关闭按钮仅适用于 Qt 中的某些选项卡

    我正在使用 Qt 完成大学作业 并且我想使用QTabWidget显示一个聊天窗口 就像Pidgin s https www pidgin im 我想让 群聊 选项卡始终打开且无法关闭 而其余 私人频道 选项卡可关闭 QTabWidget s
  • 所有页面/视图都需要 Blazor /Pages 文件夹吗?

    使用默认的 Blazor helloworl 应用程序 我将 FetchData razor 页面复制到单独的自定义文件夹中 结果 页面未正确呈现 页面正在占用 整个屏幕 导航菜单消失了 问题 blazor 页面 视图必须位于 Pages
  • 如何在不使用任何算术运算的情况下求 x mod 15?

    假设我们得到一个无符号整数 并且不使用任何算术运算符 即 or 我们要找到x mod 15 我们可以使用二进制位操作 据我所知 我是根据两点得出这个结论的 a a mod 15 a mod 16 for a lt 15 Let a x mo
  • 从 Firefox 的缓存中读取脚本标签的来源

    我正在向我的应用程序添加一些错误报告 我希望能够报告类中的方法名称 即使该函数可能是匿名的 到目前为止 我的解决方案涉及通过使用 XmlHttpRequest 加载脚本标签来读取脚本标签的源代码 我的问题是 Firefox 不会从缓存加载
  • 如何管理露天的访问权限

    大家好 提前感谢您的帮助 我正在尝试在露天配置访问权限 但现在陷入了一个场景如果有人定义实现此功能的正确方法 那将会有很大帮助现在我的问题是 我想创建一个网站 所有用户都可以访问 然后将在该站点中创建文件夹和子文件夹 如果需要 我准备自定义
  • K 最近邻算法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 使用 KNN 算法 假设 k 5 现在我尝试通过获取 5 个最近的邻居来对未知对象进行分类 如果确定 4 个最近邻居后 接下来的 2 个
  • 将 Angular 7 部署到 github 页面

    我有一个简单的 Angular7 应用程序 它只有两条路线 主要是 文章 如果你在本地测试它 它会起作用 但是当你放到 github 页面上时 它只会加载页面的 css 我按照以下角度文档进行部署文档 https angular io gu
  • 在C#中获取主目录的路径?

    好的 我已经查过了Environment SpecialFolder 但里面没有任何东西 我想在C 中获取当前用户的主目录 例如 c documents and settings user在XP下 c users user在 Vista 下
  • 如何找到给定数组中总和为“N”的所有匹配数字

    我的目标是找到所有可能的组合 总和达到给定的总数 例如 如果数组是 2 59 3 43 5 9 8 62 10 4 如果总数为 12 则可能的组合为 2 10 3 9 8 4 5 3 4 这是我编写的第一组代码 想知道对此可以进行的最佳改进