找到数字之和等于某个数字的最小正整数

问题描述 投票:0回答:4

给定一个数字,假设 t = 10。我们的任务是找到最小的正整数,使其数字之和等于 10。在这个例子中,最小整数是 19 (1+9=10)。

我想出了以下解决方案:

我想我们肯定可以使用搜索来解决这个问题。对于上面的例子,t = 10 意味着一位数(1-9)不能成立,我们就从第一个 2 位正整数 10 开始,然后逐步查找,直到找到正确答案 19 .

起始搜索点有一个通用公式。

  • 对于一位数,最大数字和为:9
  • 对于两位数,最大数字和为:18
  • ...

所以给定 t = 10,我们可以使用 t/9 + 1 知道起始搜索编号应该是两位数。最小两位数是 10。

我的问题是线性搜索有点耗时。还有吗 解决这个问题的有效方法是什么?或者是否有任何通用公式 这个问题?

更新

尽量用9,然后把剩下的放在前面。

感谢蒂皮姆和约翰·科尔曼。

例如:t = 25, 25 = 9+9+7。将7放在两个9前面生成 整数 799。

algorithm
4个回答
2
投票

解决办法是尽可能多地使用9,然后将余数放在前面。这使得余数(答案的前导数字)尽可能小,并使用尽可能少的数字。伪代码:

string( input % 9 ) + stringMult( '9', input/9 );


0
投票

我找到了一个通用公式来查找数字总和为 S 并且有 M 位的最小数字。这是它的 python 实现:

def bla(M,S):
    n=(S+7)//9
    sl=9*n -7
    c=10**(n-1)
    b=10**(M-1)
    p=int((2+S-sl)*c -1)
    return p+b

如有疑问请在下方评论。


0
投票
   int t1=pc/9;
       if(pc%9!=0)
       {
           t1++;
       }
       int t2=pr/9;
       if(pr%9!=0){
           t2++;
       }

0
投票

HomeC 编写一个 C 程序来求一个正整数的数字之和。 2024 年 4 月 8 日 0

问题陈述:

编写一个 C 程序来求正整数的数字之和。

要求:

程序应提示用户输入正整数。 它应该计算并显示输入数字的数字总和。 例如,如果输入为 123,则其数字之和将为 1 + 2 + 3 = 6。 该程序应处理单位数和多位正整数。

https://ragultechnology.blogspot.com/2024/04/write-c-program-to-find-sum-of-digits.html

© www.soinside.com 2019 - 2024. All rights reserved.