小红的数位操作
小红拿到了一个正整数n,她可以进行若干次操作,每次操作将选择一个数位,使其加1或者减1。不过有两条限制:
1、每个数位最多只能操作一次。
2、如果选择的是9,则无法进行加1操作。如果选择的是0,则无法进行减1操作。
小红希望最终n成为p的倍数,你能帮小红输出操作结束后的整数n吗?
输入描述
两个正整数n和p。
1≤n,p≤10^13
输出描述
如果误解,请输出-1。假设有多解的时候,输出任意解即可。(如果操作包含前导零,请将前导零一起输出)
n, p = input().split()
flag = False
def dfs(s, i):
if int(''.join(s)) % int(''.join(p)) == 0:
print(''.join(s))
global flag
flag = True
for i in range(i+1,len(s)):
if flag:
break
if s[i] == '9':
s[i] = '8'
dfs(s,i)
s[i] = '9'
elif s[i] == '0':
s[i] = '1'
dfs(s,i)
s[i] = '0'
else:
s[i] = str(int(s[i])+1)
dfs(s,i)
s[i] = str(int(s[i])-2)
dfs(s,i)
s[i] = str(int(s[i])+1)
if int(n) // int(p) == 0 :
print([0]*len(n))
else:
i = -1
n = list(n)
dfs(n,i)
if not flag:
print('-1')
1、每个数位最多只能操作一次。
2、如果选择的是9,则无法进行加1操作。如果选择的是0,则无法进行减1操作。
小红希望最终n成为p的倍数,你能帮小红输出操作结束后的整数n吗?
输入描述
两个正整数n和p。
1≤n,p≤10^13
输出描述
如果误解,请输出-1。假设有多解的时候,输出任意解即可。(如果操作包含前导零,请将前导零一起输出)
n, p = input().split()
flag = False
def dfs(s, i):
if int(''.join(s)) % int(''.join(p)) == 0:
print(''.join(s))
global flag
flag = True
for i in range(i+1,len(s)):
if flag:
break
if s[i] == '9':
s[i] = '8'
dfs(s,i)
s[i] = '9'
elif s[i] == '0':
s[i] = '1'
dfs(s,i)
s[i] = '0'
else:
s[i] = str(int(s[i])+1)
dfs(s,i)
s[i] = str(int(s[i])-2)
dfs(s,i)
s[i] = str(int(s[i])+1)
if int(n) // int(p) == 0 :
print([0]*len(n))
else:
i = -1
n = list(n)
dfs(n,i)
if not flag:
print('-1')
全部评论
相关推荐
09-25 23:06
门头沟学院 Java 点赞 评论 收藏
分享