algorithm - 这可能吗?总和的最后几位等于另一个数字

标签 algorithm math numbers

我有一个 n 位数字和一个数字列表,其中任何数字都可以使用任意次数。

从列表中获取数字,我怎么知道可以生成一个总和,使得总和的最后 n 位数字是第 n 位数字?

注意:总和有一些初始值,它不是零。

编辑 - 如果存在解决方案,我需要找到添加的数字的最小数量以获得一个数字,以便它具有最后 4 位数字作为给定数字。这很容易用 DP(最小硬币找零问题)解决。

例如,如果n=4,

Given number  = 1212
Initial value = 5234
List = [1023, 101, 1]
A solution exists: 21212 = 5234 + 1023*15 + 101*6 + 1*27

最佳答案

很容易找到反例(见评论)。

现在,这里的解决方案是动态编程方法:

所有算术都是模 10^n。对于 0 - 10^n-1 范围内的每个值,您需要一个标志是否找到它,并且您需要一个队列来处理要处理的元素。

  1. 将初始值推送到待处理列表。
  2. 从待处理列表中获取一个元素。如果为空,则完成。没有解决方案。
  3. 尝试将每个数字分别添加到此数字。如果已经找到,则无需执行任何操作。如果找到总和,你就完成了,有一个解决方案。如果没有,将其标记为已找到并将其推送到队列。
  4. 转到 2

如果您存储达到某个数字的方式,则可以重建实际的解决方案。您只需从 sum 返回,直到达到初始值。

关于algorithm - 这可能吗?总和的最后几位等于另一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975354/

相关文章:

javascript - 有向无环层次图实现

JavaScript 公式语法不起作用

angularjs - Angular js - 四舍五入

c++ - 在 C 中查找 100 位数字 mod 10^9+7 的值

ruby - 此 ruby​​ 代码算作递归函数吗?

algorithm - 使用拓扑排序计算路径

.net - 在大图片中查找小图片的快速算法?

algorithm - 找到两条线段的交点

oracle - 为什么我在格式化后在 NUMBER 列中得到 ####?

检查输入是否为数字