Algorithm 求最小正整数,其数字之和等于某个数字

Algorithm 求最小正整数,其数字之和等于某个数字,algorithm,Algorithm,给定一定的数字,表示t=10。我们的任务是找到最小正整数,使其数字之和等于10。在本例中,最小整数为19(1+9=10) 我提出了以下解决方案: 我想我们绝对可以用搜索来解决这个问题。对于上面的例子,t=10意味着一位数字(1-9)无法工作,我们只需从第一个2位正整数(10)开始,然后逐步搜索,直到找到正确答案(19) 起始搜索点有一个通用公式 对于一位数,最大位数和为:9 对于两位数,最大位数和为:18 因此,给定t=10,我们可以使用t/9+1知道开始搜索编号应该是两位数。最小两位数为

给定一定的数字,表示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。

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

string(输入%9)+stringMult('9',输入/9)

我找到了一个通用公式,可以找到数字总和为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

如果您有任何疑问,请在下面进行评论。

尽可能多地使用9,然后将剩余的放在前面?你试过什么?这不管用。例如:t=25,result=898而不是998Teepeemm的算法将产生799,而不是998@Teepeemm,明白了。谢谢请不要只在答案中写代码。相反,还要尝试解释该代码的作用。
   int t1=pc/9;
       if(pc%9!=0)
       {
           t1++;
       }
       int t2=pr/9;
       if(pr%9!=0){
           t2++;
       }