Python 是否有更有效的实施方案?

Python 是否有更有效的实施方案?,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,问题陈述: 给你两个正整数 D 及 s . 求最小正整数 N 它可以被 D 和的数字之和等于 s 输入: 第一行包含两个正整数 D 及 s ( 1. ≤ D ≤ 500 , 1. ≤ s ≤ 5000 )被空间隔开 输出: 打印所需的数字或-1(如果不存在) 这是我的代码: d_and_s = [int(x) for x in input().split()] counter_dracula = 0 while True: if counter_dracula%d_and_s[0] =

问题陈述:

给你两个正整数 D 及 s . 求最小正整数 N 它可以被 D 和的数字之和等于 s

输入:

第一行包含两个正整数 D 及 s ( 1. ≤ D ≤ 500 , 1. ≤ s ≤ 5000 )被空间隔开

输出:

打印所需的数字或-1(如果不存在)

这是我的代码:

d_and_s = [int(x) for x in input().split()]
counter_dracula = 0
while True:
    if counter_dracula%d_and_s[0] == 0 and sum(map(int, str(counter_dracula))) == d_and_s[1]:
        break
     counter_dracula += 1
     print(counter_dracula)
这是我的实现,但显然必须有一个更快的方法。 例如,如果输入为
13
50
,则输出为
699998
。 我的代码给出了正确的答案,但在这个示例测试用例中需要很长时间,甚至更长:输入是
61
2
,输出是
1000000000000000001

如何使用Python3正确地实现它们?

(是的,问题又来了:-)

对于一个相当大的改进,认识到可被d整除的数字是d,2*d,3*d,4*d

因此,您可以使用d递增循环,而不是每次递增1

def sum_digits(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

d, s = [int(x) for x in input().split()]

counter = 0

while True:
    counter += d
    if sum_digits(counter) == s:
        break
print(counter)
(是的,问题又开始了:-)

对于一个相当大的改进,认识到可被d整除的数字是d,2*d,3*d,4*d

因此,您可以使用d递增循环,而不是每次递增1

def sum_digits(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

d, s = [int(x) for x in input().split()]

counter = 0

while True:
    counter += d
    if sum_digits(counter) == s:
        break
print(counter)

这有帮助吗:?嗨,对于一个相当大的改进,认识到可被d整除的数字是d,2*d,3*d,4*d。。。因此,不必每次将循环递增1,您可以在n:r,n=r+n%10,n//10返回rd,s=[int(x)for x in input().split()]counter=0,而True:counter+=d if sum(map(int,str(counter)))==s:break print(计数器)(抱歉,无法向您发布解决方案,格式更好,问题已结束)@WalterTross啊,我在另一个问题中忽略了这个限制。尽管如此,我还是希望看到这个问题经过编辑,以提及其中的差异,并说明在看到另一个问题后,马希尔仍然对什么感到困惑,或者为什么它没有帮助。关键是,@ChristianSloper在一篇评论中回答(基本上与我所想的答案相同),OP对此感到高兴。克里斯蒂安:你可以继续写一个常规的答案。这有帮助吗:?嗨,一个相当大的改进,认识到被d整除的数字是d,2*d,3*d,4*d。。。因此,不必每次将循环递增1,您可以在n:r,n=r+n%10,n//10返回rd,s=[int(x)for x in input().split()]counter=0,而True:counter+=d if sum(map(int,str(counter)))==s:break print(计数器)(抱歉,无法向您发布解决方案,格式更好,问题已结束)@WalterTross啊,我在另一个问题中忽略了这个限制。尽管如此,我还是希望看到这个问题经过编辑,以提及其中的差异,并说明在看到另一个问题后,马希尔仍然对什么感到困惑,或者为什么它没有帮助。关键是,@ChristianSloper在一篇评论中回答(基本上与我所想的答案相同),OP对此感到高兴。克里斯蒂安:你可以继续写一个固定的答案。