编程语言
首页 > 编程语言> > 2786: 这是一道数学题 python

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