一个数通过最小次数交换数位变成20的倍数。问最少交换次数是多少?
一个正整数T(1<=T<=200),代表有T组输入。每个输入包含一个正整数N(1<=N<=10的18次方),N没有前导0。
最小的交换次数。如果不能交换出20的倍数,输出-1
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。