找到最小正整数,以便它可以被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)moda
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