按词汇顺序查找总和为给定数字的千组

2023-12-08

较大的数字可以采用逗号格式,以便更容易地分为三个一组。例如。1050 = 1,050 and 10200 = 10,200.

每三组的总和为:

1050=1,050 gives: 1+50=51

10200=10,200 gives: 10+200=210

我需要在三人组的总和中搜索匹配项。 也就是说,如果我正在寻找1234,然后我正在寻找三元之和的数字= 1234.

最小的匹配是235,999 since 235+999=1234。没有其他整数小于235,999给出三的和等于 1234.

下一个最小的匹配是236,998 since 236+998=1234。 每次都可以加 999,但在达到 999 后就失败了,因为 999 溢出,所以在数字上多加了一位 1。

更一般地说,我要求解决方案(从最小到最高):

a+b+c+d…=x

其中 a,b,c,d… 是 0-999 和 x 之间的任意整数 是一个固定整数

请注意,对于任何正整数 x,都有无限个解。

如何从最小数量的解决方案开始获得这一问题的解决方案(对于 y 个解决方案,其中 y 可以是任意大的数字)?

有没有一种方法可以做到这一点,而不用暴力一一循环?我正在处理可能非常大的数字,这可能需要数年时间才能直接循环。理想情况下,人们应该在没有失败的尝试的情况下做到这一点。


如果您一次只考虑 1 位数字,而不是 3 位数字组,那么这个问题就更容易思考。

算法:

  • 首先用 x 填充 0 数字组。

  • 创建一个循环,每次打印下一个解决方案。

    • 通过将所有过大的值从右侧移动到左侧,仅将最大值保留在右侧,对组进行“标准化”。
    • 输出解决方案
    • Repeat:
      • 倒数第二组加1
      • 如果组太大(例如 999+1 太大),则可以向左进位
      • 检查结果是否没有变得太大(a[0]应该能够吸收添加的内容)
      • 如果结果太大,请将组设置为零并继续增加较早的组
    • 计算最后一组吸收盈余(可以是正数或负数)

一些用于说明的 Python 代码:

x = 1234
grouping = 3
max_iterations = 200
max_in_group = 10**grouping - 1

a = [x]

while max_iterations > 0:
    #step 1: while a[0] is too large: redistribute to the left
    i = 0
    while a[i] > max_in_group:
        if i == len(a) - 1:
            a.append(0)
        a[i + 1] += a[i] - max_in_group
        a[i] = max_in_group
        i += 1

    num = sum(10**(grouping*i) * a[i] for i, n in enumerate(a))
    print(f"{num}  {num:,}")
    # print("".join([str(t) for t in a[::-1]]), ",".join([str(t) for t in a[::-1]]))

    # step 2:  add one to the penultimate group, while group already full: set to 0 and increment the
    #   group left of it;
    #   while the surplus is too large (because a[0] is too small) repeat the incrementing
    i0 = 1
    surplus = 0
    while True:  # needs to be executed at least once, and repeated if the surplus became too large
        i = i0
        while True:  # increment a[i] by 1, which can carry to the left
            if i == len(a):
                a.append(1)
                surplus += 1
                break
            else:
                if a[i] == max_in_group:
                    a[i] = 0
                    surplus -= max_in_group
                    i += 1
                else:
                    a[i] += 1
                    surplus += 1
                    break
        if a[0] >= surplus:
            break
        else:
            surplus -= a[i0]
            a[i0] = 0
            i0 += 1

    #step 3: a[0] should absorb the surplus created in step 1, although a[0] can get out of bounds
    a[0] -= surplus
    surplus = 0
    max_iterations -= 1

缩写输出:

235,999 236,998 ... 998,236 999,235 ... 1,234,999 1,235,998 ... 1,998,235 1,999,234 2,233,999 2,234,998 ... 

输出为grouping=3 and x=3456:

459,999,999,999 460,998,999,999 460,999,998,999 460,999,999,998 461,997,999,999
461,998,998,999 461,998,999,998 461,999,997,999 461,999,998,998 461,999,999,997
462,996,999,999 ...

输出为grouping=1 and x=16:

79 88 97 169 178 187 196 259 268 277 286 295 349 358 367 376 385 394 439 448 457 466
475 484 493 529 538 547 556 565 574 583 592 619 628 637 646 655 664 673 682 691 709
718 727 736 745 754 763 772 781 790 808 817 826 835 844 853 862 871 880 907 916 925
934 943 952 961 970 1069 1078 1087 1096 1159 1168 1177 1186 1195 1249 1258 1267 1276
1285 1294 1339 1348 1357 1366 1375 1384 1393 1429 1438 1447 1456 1465 1474 1483 1492
1519 1528 1537 1546 1555 1564 1573 1582 1591 1609 1618 1627 1636 1645 1654 1663 1672
1681 1690 1708 1717 1726 1735 1744 1753 1762 1771 1780 1807 1816 1825 1834 1843 1852
1861 1870 1906 1915 1924 1933 1942 1951 1960 2059 2068 2077 2086 2095 2149 2158 2167
2176 2185 2194 2239 2248 2257 2266 2275 2284 2293 2329 2338 2347 2356 2365 2374 2383
2392 2419 2428 2437 2446 2455 2464 2473 2482 2491 2509 2518 2527 2536 2545 2554 2563
2572 2581 2590 2608 2617 2626 2635 2644 2653 2662 2671 2680 2707 2716 2725 2734 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按词汇顺序查找总和为给定数字的千组 的相关文章

  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • CGPoint 标量乘法 Swift

    我正在 SpriteKit 中构建一个平台游戏 并将为我的实体实现更新功能 以便它们根据重力和速度移动 但是 我需要使添加的速度量与增量时间成比例 以防止帧速率影响我的实体的移动方式 因此我将导入 GLKit 以便我可以使用标量函数 但是
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • 矩阵乘法 - 视图/投影、世界/投影等

    在 HLSL 中有很多矩阵乘法 虽然我了解如何以及在何处使用它们 但我不确定它们是如何导出的或它们的实际目标是什么 所以我想知道是否有在线资源可以解释这一点 我特别好奇将世界矩阵乘以视图矩阵以及世界 视图矩阵乘以投影矩阵背后的目的是什么 您
  • C++ Exp 与 Log:哪个更快?

    我有一个 C 应用程序 需要比较两个值并决定哪个值更大 唯一的复杂之处是一个数字在对数空间中表示 而另一个则不是 例如 double log num 1 log 1 23 double num 2 1 24 如果我想比较num 1 and
  • 用 python 编写的数学语法检查器

    我需要的只是使用 python 检查字符串是否是有效的数学表达式 为了简单起见 假设我只需要 运算符 也作为一元 带有数字和嵌套括号 为了完整性 我还添加了简单的变量名称 所以我可以这样测试 test 3 2 1 valid test 3
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Javascript:生成具有固定平均值和标准差的随机数

    我的问题 如何在 Javascript 中创建具有给定平均值和标准差 sd 的随机数列表 Example 我想创建一个包含 5 个范围在 1 到 10 之间的随机数的列表 生成的平均值应为 5 标准差应为 2 到目前为止我所做的 我的想法是
  • 为什么 Math.Round 不返回 int? [复制]

    这个问题在这里已经有答案了 在 C 中 为什么舍入数学函数 Floor Ceiling 和 Round 不返回int 考虑到函数的结果始终是整数 为什么它返回一个float double or decimal double has the
  • 为 javascript 编写一个真正具有包容性的随机方法

    Javascript MATH 对象有一个随机方法 该方法从集合 0 1 返回 0 含 0 1 不包括 有没有办法返回一个真正随机的方法 其中包括 1 e g var rand MATH random 2 if rand gt 1 rand
  • 涉及数学的方法给出与计算器不同的答案

    我是java新手 所以请耐心等待 我试图从比赛总数中获得胜利的百分比 但我正在做的事情还很遥远 我获取百分比的方法如下 public double winPercentage int wins int total return wins t
  • 确保 unsigned int/long 始终在 C# 中的检查上下文中执行

    有没有人觉得奇怪 uint 和 ulong 的默认上下文是未检查的 而不是检查的 因为它们旨在表示永远不能为负的值 因此 如果某些代码试图违反该约束 在我看来 自然且首选的行为是抛出异常 而不是返回最大值 这很容易使重要数据处于无效状态并且
  • 生成总和恒定的随机数

    我在想是否有办法生成一组随机数 其总和始终是一个常数 例如 20 可以分为 5 个数字 1 2 3 4 10 我不在乎这 5 个数字分别是什么 只要它们的总和等于 20 有没有办法以编程方式执行此操作 为了获得均匀分布 技巧是将总和视为一条
  • 如何在 C# 中将 BigInteger 转换为 pow Double?

    我尝试使用BigInteger Pow计算类似 10 12345 987654321 的方法 但此方法只接受整数作为指数 如下所示 BigInteger Pow BigInteger x int y 那么如何在上述方法中使用双数作为指数呢
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

    我正在用 C 编写一个计算器 textBoxResult是一个文本框 我在其中显示数字 recount是以度为单位获取角度并以弧度为单位返回的函数 我的角度是从texBoxInput public double recount int nu
  • 为什么 Math.Atan(Math.Tan(x)) != x?

    如果 tan x y 并且 atan y x 为什么 Math Atan Math Tan x x 我正在尝试计算 x 例如 tan 2 x 3 5 so atan tan 2 x 3 atan 5 等等 但我已经尝试过 double d

随机推荐

  • 如何最好地实现自定义类型的 Equals?

    假设有一个 Point2 类 并且以下等于 public override bool Equals object obj public bool Equals Point2 obj 这是 Effective C 3 中所示的内容 publi
  • ASP 奇怪的未指定错误 - 80004005

    我必须在一个已经制作好的网站上工作 只需添加一些小模块 当我更新时 不同的子文件夹中有许多名为 myDB mdb 的文件 我想确保我的应用程序连接正确的数据库 所以我开始重命名子文件夹 在其中一个子文件夹中 我刷新了 主站点和我的停止工作
  • Zend Framework 2 过滤/验证内容数组

    如何将过滤器应用于包含数组内容的字段元素 例如 this gt add name gt tags type gt text filter gt array array name gt StripTags array name gt Stri
  • 如何将值从一个 JLabel 传输到另一个 JLabel?

    我有这个计算器 但我不知道如何获取其中的值resultpane单击 完成 按钮时到第一个文本框 我是 Java 新手 我已经尝试这样做 但我一直收到错误 import java awt BorderLayout import java aw
  • My SQL 错误:连接尝试失败,因为连接方未正确响应

    我在第三方服务器中有一个 MySQL 数据库 我正在尝试使用 Dreamweaver 中的 PHP 从本地计算机访问它 但是 我收到以下错误 MySQL 错误 2002 连接尝试失败 因为连接方未正确响应 一段时间后 或建立连接失败 因为连
  • 如何在 XSL 中用空格替换逗号

    我需要在 XML 输出中将所有其他逗号替换为空格 现在 我的纬度和经度如下所示 0 52437106918239 0 391509433962264 0 533805031446541 0 430817610062893 0 0 54795
  • 使用 PackageManager 不会在 Android 11 上填充应用列表

    我正在使用包管理器来获取启动器中应用程序抽屉界面的应用程序列表 一切正常 但在 Android 11 上 唯一显示的应用程序是 Android 设置应用程序 是什么改变了它不再工作和 或我应该做什么才能使它工作 应用程序列表现在基于用户配置
  • 从 pandas DataFrame 中的日期时间列中提取月份

    我有一个从 Excel 读取的 DataFrame 其中包含 DateTime 类型的列之一 sales data pandas read excel r Sample Sales Data xlsx 我能够使用 str extract l
  • 将列向量转换为 R 中矩阵的对角线?

    我在 R 中有一个具有以下格式的列向量 num 1 2464 1 我想对向量进行对角线排列 因此每个元素都位于矩阵的对角线中 我尝试过以下代码 diagvector lt diag myvector 但随后它只显示第一个数字 我想我只能使用
  • 使用不同节点运行 SKActions 序列

    我知道我可以创建一个 SKAction sequence 它将一一运行一个节点的操作 但是 如果我想用不同的节点执行序列 我该怎么做呢 我想做这样的事情 从节点 A 运行操作 等待 2 秒 从节点 B 运行操作 如果两个节点的名称是唯一的并
  • DestroyWindow 不会使用 Python 和 OpenCV 关闭 Mac 上的窗口

    我的程序使用以下代码生成一系列窗口 def display img name fun global clicked cv NamedWindow name 1 cv ShowImage name img cv SetMouseCallbac
  • z3 对于没有量词的断言生成未知

    我有一些简单的约束 涉及 z3 中实数的乘法 这些约束产生unknown 问题似乎是它们被包装在数据类型中 因为未包装的版本会产生sat 这是一个简化的情况 declare datatypes T NUM n Real declare co
  • 限制可以上传的文件数量

    如何限制可以上传的文件数量 The max验证似乎适用于图像的大小 以千字节为单位 如何验证允许上传的最大文件数 例如 单个输入只能上传 10 个文件 我在 Laravel 7 x 中的表现如何 使用以下命令创建一个新的表单请求类 php
  • 需要替代的 Python 列表反向解决方案

    我今天参加了一个工作面试 在此期间 我被要求写下一个反转列表的算法 首先我使用reverse 方法提供了答案 x 1 2 3 4 5 y reversed x for i in y print i 进行面试的高级开发人员问我是否知道另一种方
  • 如何在 C# 中以编程方式将 xlsx 文件转换为 2003 xls 文件?

    我找到了Excel包 一个比 Excel Interop API 更好的库 用于以编程方式创建和维护 Excel 工作表 但它们是在 xlsx 中生成的 大多数看到这些文件的人只安装了 Office 2003 因此我需要在我的 C 代码中将
  • 如何将“Mon Jun 18 00:00:00 IST 2012”转换为 18/06/2012?

    我有一个像下面这样的值Mon Jun 18 00 00 00 IST 2012我想将其转换为18 06 2012 如何转换这个 我尝试过这个方法 public String toDate Date date SimpleDateFormat
  • 上传到 FTP 时保留图像创建日期

    因此 我正在为我的家人制作一个网站 我们可以在其中上传图像并查看它们 但该网站的一个重要功能是按日期排序 以便例如我的阿姨在我母亲的生日时拍了照片 而我也有拍摄照片 我们上传图像 它们将添加到同一相册等 我意识到通过浏览器上传时无法保留日期
  • jqGrid - 在网格中不提供数据消息?

    如果当前搜索没有返回数据 我们将使用loadComplete回调向用户打印一条消息 表明没有数据 有没有办法配置 jqGrid 以在网格内打印出 无数据 消息 目前我们将其打印在div在网格上方 但希望它位于实际网格内 jqGrid 显示
  • Apache AGE-如何实现两个图之间的关系

    如果我们有 2 个图数据库 A 和 B 并且当前节点 A 图数据库和 B 图数据库之间没有关系 现在我必须在 A 节点和 B 节点之间添加关系 那么如何我使用 AGE 来做到这一点 例如 A 可以是员工图数据库 B 可以是任何汽车经销商图数
  • 按词汇顺序查找总和为给定数字的千组

    较大的数字可以采用逗号格式 以便更容易地分为三个一组 例如 1050 1 050 and 10200 10 200 每三组的总和为 1050 1 050 gives 1 50 51 10200 10 200 gives 10 200 210