找到最小正整数,其总和等于某个数字

时间:2015-08-07 02:56:15

标签: algorithm

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

我提出了以下解决方案:

我想我们绝对可以使用搜索来解决这个问题。对于上面的例子,t = 10表示一位数字(1-9)不起作用,我们只是从第一个2位正整数开始,然后逐步搜索,直到找到正确答案为19

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

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

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

我的问题是线性搜索有点费时。还有吗? 有效的方法来解决这个问题?或者甚至有任何通用的公式 这个问题?

更新

尽可能使用9,然后将余数放在前面。

感谢Teepeemm和John Coleman。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我找到了一个通用公式,可以找到数字加起来为 S 且具有 M 个数字的最小数字。这是它的python实现:

data.sort((a,b) => a.newOne === b.newOne ? 0 : a.newOne ? -1 : 1)

如有任何疑问,请在下面评论。

答案 2 :(得分:0)

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