查找大小为 n 的列表中的哪些数字与另一个数字相加的算法

2023-11-22

我有一个十进制数(我们称之为goal)和其他十进制数的数组(我们称该数组为elements)并且我需要找到来自的所有数字组合elements总和就是目标。

我更喜欢 C# (.Net 2.0) 中的解决方案,但无论如何,最好的算法可能会获胜。

您的方法签名可能类似于:

public decimal[][] Solve(decimal goal, decimal[] elements)

有趣的答案。感谢您对维基百科的指点 - 虽然很有趣 - 他们实际上并没有解决我在寻找精确匹配时所说的问题 - 更多的是会计/账簿平衡问题而不是传统的装箱/背包问题。

我一直饶有兴趣地关注堆栈溢出的发展,并想知道它会有多大用处。这个问题在工作中出现,我想知道堆栈溢出是否可以比我自己编写更快地提供现成的答案(或更好的答案)。也感谢建议将此标记为家庭作业的评论 - 我想鉴于上述情况,这是相当准确的。

对于那些感兴趣的人,这是我的解决方案,它使用递归(自然)我也改变了对方法签名的想法,并选择 List> 而不是十进制[][] 作为返回类型:

public class Solver {

    private List<List<decimal>> mResults;

    public List<List<decimal>> Solve(decimal goal, decimal[] elements) {

        mResults = new List<List<decimal>>();
        RecursiveSolve(goal, 0.0m, 
            new List<decimal>(), new List<decimal>(elements), 0);
        return mResults; 
    }

    private void RecursiveSolve(decimal goal, decimal currentSum, 
        List<decimal> included, List<decimal> notIncluded, int startIndex) {

        for (int index = startIndex; index < notIncluded.Count; index++) {

            decimal nextValue = notIncluded[index];
            if (currentSum + nextValue == goal) {
                List<decimal> newResult = new List<decimal>(included);
                newResult.Add(nextValue);
                mResults.Add(newResult);
            }
            else if (currentSum + nextValue < goal) {
                List<decimal> nextIncluded = new List<decimal>(included);
                nextIncluded.Add(nextValue);
                List<decimal> nextNotIncluded = new List<decimal>(notIncluded);
                nextNotIncluded.Remove(nextValue);
                RecursiveSolve(goal, currentSum + nextValue,
                    nextIncluded, nextNotIncluded, startIndex++);
            }
        }
    }
}

如果您想要一个应用程序来测试其工作原理,请尝试以下控制台应用程序代码:

class Program {
    static void Main(string[] args) {

        string input;
        decimal goal;
        decimal element;

        do {
            Console.WriteLine("Please enter the goal:");
            input = Console.ReadLine();
        }
        while (!decimal.TryParse(input, out goal));

        Console.WriteLine("Please enter the elements (separated by spaces)");
        input = Console.ReadLine();
        string[] elementsText = input.Split(' ');
        List<decimal> elementsList = new List<decimal>();
        foreach (string elementText in elementsText) {
            if (decimal.TryParse(elementText, out element)) {
                elementsList.Add(element);
            }
        }

        Solver solver = new Solver();
        List<List<decimal>> results = solver.Solve(goal, elementsList.ToArray());
        foreach(List<decimal> result in results) {
            foreach (decimal value in result) {
                Console.Write("{0}\t", value);
            }
            Console.WriteLine();
        }


        Console.ReadLine();
    }
}

我希望这可以帮助其他人更快地得到答案(无论是家庭作业还是其他)。

干杯...

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

查找大小为 n 的列表中的哪些数字与另一个数字相加的算法 的相关文章

  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 使用 linq to xml 遍历 xml 树中的每个元素

    我想遍历 xml 中的每个元素和属性并获取名称和值 而无需提前知道元素的名称 我什至有一本关于 linq to xml with C 的书 它只告诉我当我已经知道元素的名称时如何查询以获取元素的值 下面的代码只提供了最高级别的元素信息 我还
  • 将 Enumerable.Range 转换为字符串列表

    在 Linq 中 如何将 Enumerable Range 1 31 转换为字符串列表 var list Enumerable Range 1 31 Select n gt n ToString ToList
  • 使用 Python/PIL 从图像中删除背景颜色

    我一直在努力让它发挥作用 但确实遇到了麻烦 所以非常感谢您的帮助 使用下面的代码 我想将具有指定 RGB 值的特征更改为白色 并将图像中的所有其他特征更改为黑色 即基本上从图像中提取特征 不幸的是 尽管我可以将我想要的特征 extract
  • Java 中序列化对象大小与内存中对象大小

    有没有一种方法可以从 Java 中的序列化对象大小 粗略地 估计内存对象大小 内存中的大小通常在可序列化大小的一半到两倍之间 最极端的例子可能是超过 80 个字节的字节 序列化后在内存中可以是 16 个字节 您可以使用探查器来告诉您对象使用
  • 从客户端的不同文件加载 WCF 配置

    许多人在 WCF 中面临的一个常见问题是无法从不同的配置文件加载客户端配置 当开发人员想要部署一些二进制文件以及独立的配置文件 也可能位于资源文件或另一个配置文件中 以避免修改主配置文件时 这是一种常见的情况 我找到了两个参考资料 http
  • 自定义对话框全屏打开

    我正在开发一个 Android 应用程序 我有一个关于自定义对话框的问题 我这样做是为了打开一个自定义对话框 protected void showSetFriendEmailDialog Create the dialog final D
  • Swift 中的日期格式 TODAY TOMORROW YESTERDAY

    我想将日期显示为6 月 13 日星期六 如果日期是当天 则应显示Today像那样Tomorrow 昨天 我无法同时实现这两个目标 guard let date Date fromString 16 September 2020 format
  • Android 从哪里获取默认时区?

    Android 设备从哪里获取默认时区 示例 您启动一个全新的 Android 设备 并且存在带有 日期和时间 活动的设置向导 其中已经选择了默认时区 在我的情况下 http en wikipedia org wiki Central Eu
  • 重载解析中的约束是否受到不同类型限定符的影响?

    有以下简单代码 include
  • Plotly 热图未渲染所有 yaxis 标签

    我构建了一个带有热图的仪表板 但是我注意到 t 我的 y 轴中的一些标签没有显示 我只得到了有限的我不知道出了什么问题 这是我的仪表板 import dash import dash table import plotly graph ob
  • 获取特定 URL 和页面的 FB 点赞数

    这是两个问题合而为一的问题 是否可以获取网站内特定页面的点赞数 就像如果有一个没有特定目标网址的点赞按钮 点赞将被给予在window location href 可以在没有 API 密钥的情况下检索此号码吗 如果我只有网站的 URL 是否可
  • Magento:将捆绑中的简单产品添加到购物车中的单独行

    我的客户要求 每当用户添加产品时 他们销售的捆绑产品 服装上衣和下装 中的每个简单产品都应作为单独的行项目添加到购物车中 谁能指导我如何实现这一目标 我对 MVC 和 Zend Framework 相当熟悉 但我需要一些帮助来找到控制将捆绑
  • 我们究竟应该如何在 Android 上实现 Chrome 的本机应用程序安装提示?

    我正在查看 Google 文档https developers google com web fundamentals app install banners native 尝试找出如何在 Android 版 Chrome 上显示安装横幅来
  • 如何为Hadoop生态系统配置hosts文件

    这个问题似乎很明显 但由于 hadoop 集群上的主机文件配置错误 我已经多次遇到过这个问题 任何人都可以描述如何为 hadoop 和类似环境使用 如 cloudera 设置主机文件和其他相关网络配置 特别是当我必须添加主机名和 FQDN
  • 温莎城堡在哪里以及如何建立伐木设施

    我对温莎城堡相当陌生 正在研究伐木设施的内部和外部 这看起来相当令人印象深刻 但我唯一无法解决的是 Windsor 在我的类上设置 Logger 属性的位置 如以下代码所示 如 果该类尚未设置 但当 Resolve 完成运行时 将设置 Lo
  • 为什么这段代码在粘贴时可以编译,但在其他情况下会失败?

    有朋友让我看一下这一页 并注意到其中一位论坛用户的签名中有一段奇怪的代码 该代码是一行代码 如下所示 On Local Error Resume Next If Not Empty Is Nothing Then Do While Null
  • Rails 3.2 唯一性验证引发未定义的方法“零?”对于 nil:Nilclass

    我正在使用 Rails 3 2 0 我有一个简单的模型 如下所示 class Favorite lt ActiveRecord Base validates lst presence gt true validates uuid prese
  • 如何验证 Azure Active Directory 用户凭据?

    我在 azure Active Directory 中有一组用户 在我的程序中 我将收集最终用户的用户名和密码 并希望检查 Windows azure 活动目录 是否可以 请提供一些参考 我知道我们可以使用 Power shell cmdl
  • ASP.Net AppFabric 缓存缺少 Flush/Clear 和 Count/GetCount 方法?

    我正在尝试将使用 EntLib 的解决方案转换为使用 AppFabric 缓存 通过一些扩展方法的帮助 这是一个相当轻松的过程 我使用的扩展方法 public static bool Contains this DataCache data
  • 查找大小为 n 的列表中的哪些数字与另一个数字相加的算法

    我有一个十进制数 我们称之为goal 和其他十进制数的数组 我们称该数组为elements 并且我需要找到来自的所有数字组合elements总和就是目标 我更喜欢 C Net 2 0 中的解决方案 但无论如何 最好的算法可能会获胜 您的方法