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