2786: 这是一道数学题 python

这篇博客通过Python代码解决了一道数学题目,即判断一个正整数通过最少次数交换数位是否能变成20的倍数。代码首先找到数字中的0位置,然后检查是否有足够的偶数位与0配合使数字能被20整除。根据不同的数位情况,计算并输出最少的交换次数,若无法满足条件则输出-1。博客突出了Python在解决数学问题上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃鱼人士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值