2786: 这是一道数学题 python

2021/6/12 20:27:22

本文主要是介绍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。



这篇关于2786: 这是一道数学题 python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程