2786: 这是一道数学题 python
作者:互联网
2786: 这是一道数学题:
一个数通过最小次数交换数位变成20的倍数。问最少交换次数是多少?
输入 :
一个正整数T(1<=T<=200),代表有T组输入。每个输入包含一个正整数N(1<=N<=10的18次方),N没有前导0。
输出 :
最小的交换次数。如果不能交换出20的倍数,输出-1
python代码:
t = int(input())
for i in range(t):
x = input()
num0 = x.find('0') # 返回0所在的索引,没有返回-1
num = 0
str1 = '02468'
# 没有0直接返回结果
if num0 == -1:
print(-1)
else:
# 只有满足至少有两个0或者一个0一个偶数,即能够被20整除
y = 0
for j in range(len(x)):
if x[j] in str1 and j != num0:
y += 1
break
# 只有一个0
if y == 0:
print(-1)
# 满足至少两个0 或一个0一个偶数
else:
# 最后一位是0
if x[-1] == '0':
# 倒数第二位是0或偶数
if x[-2] in str1:
print(0)
else:
print(1)
# 最后一位数不是0
else:
# 倒数第二位是0
if x[-2] == '0':
if x[-1] in str1:
print(1) # 代表最后两位数交换
else:
# 特殊情况举例7007、7207
if x[:-2].find('0') == -1:
print(2) # 代表7207 交换2次
else:
print(1) # 代表7007 交换1次
else:
if x[-2] in str1:
print(1)
else:
print(2)
人生苦短,我用python。
标签:20,2786,num0,python,str1,交换,else,print,数学题 来源: https://blog.csdn.net/qq_46631566/article/details/117851793