找到最小正整数,以便它可以被A整除并且其位数之和等于Python中的B

假设我们有两个数字A和B,我们必须找到最小的正数M,以便M被A整除,并且M的数字之和与B相同。因此,如果没有这样的结果,则返回- 1。

因此,如果输入类似于A = 50,B = 2,则输出将为200,因为它可以被50整除并且其数字的总和= 2 + 0 + 0 = 2。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个元素类型容器,其中包含两个数字a和b以及一个字符串

  • que:=一个新列表

  • elem:=一个带有(0,0,空字符串)的新元素

  • 造访过[0,0]:= 1

  • 在队列末尾插入elem

  • 当que的大小> 0时,执行

    • x:=(temp_elem.a * 10 + i)mod a

    • y:= temp_elem.b + i

    • 如果y <= b并且visited [x,y]为False,则

    • Visited [x,y]:= 1

    • 用x,y和temp_elem.string插入新元素将我连接到que

    • 返回temp_elem.string的整数

    • temp_elem:=从队列中删除第一个元素

    • 如果temp_elem.a为0而temp_elem.b为b,则

    • 为我在0到9的范围内

    • 返回-1

    例 

    让我们看下面的实现以更好地理解-

    visited = [[0 for x in range(501)] for y in range(5001)]

    class Element:

       def __init__(self, a, b, string):

          self.a = a

          self.b = b

          self.string = string

    def get_number(a, b):

       que = []

       elem = Element(0, 0, "")

       visited[0][0] = 1

       que.append(elem)

       while len(que) > 0:

          temp_elem = que.pop(0)

          if temp_elem.a == 0 and temp_elem.b == b:

             return int(temp_elem.string)

          for i in range(0, 10):

             x = (temp_elem.a * 10 + i) % a

             y = temp_elem.b + i

             if y <= b and visited[x][y] == False:

                visited[x][y] = 1

                que.append(Element(x, y, temp_elem.string + str(i)))

       return -1

    a, b = 50, 2

    print(get_number(a, b))

    输入值

    50, 2

    输出结果

    200

    以上是 找到最小正整数,以便它可以被A整除并且其位数之和等于Python中的B 的全部内容, 来源链接: utcz.com/z/335251.html

    回到顶部