3791.给定范围内平衡整数的数目
难度:困难
问题描述:
给你两个整数low和high。
如果一个整数同时满足以下两个条件,则称其为平衡整数:
它至少包含两位数字。
偶数位置上的数字之和等于奇数位置上的数字之和(最左边的数字位置为1)。
返回一个整数,表示区间[low,high](包含两端)内平衡整数的数量。
示例1:
输入:low=1,high=100
输出:9
解释:
1到100之间共有9个平衡数,分别是11、22、33、44、55、66、77、88和99。
示例2:
输入:low=120,high=129
输出:1
解释:
只有121是平衡的,因为偶数位置与奇数位置上的数字之和都为2。
示例3:
输入:low=1234,high=1234
输出:0
解释:
1234不是平衡的,因为奇数位置上的数字之和(1+3=4)不等于偶数位置上的数字之和(2+4=6)。
提示:
1<=low<=high<=1015
问题分析:
本问题是一个用枚举算法解决的问题,通过枚举区间[low,hight]中的每一个整数,然后判断这个整数是否为一个平衡整数,如果是,则作记录,如果不是则继续列举下一个整数,这样列举完区间中所有整数,统计记录下来的整数个数,即为问题的解,所以本问题解决的关键就是如何判断一个整数是否为一个平衡整数的问题,程序中设计了函数check_balance_number(n),其功能是对输入的一个整数n进行判断,如何n是平衡整数,返回True,否则返回False,其判断逻辑见程序。
程序如下:
python
#判断一个整数是否为平衡整数,如果是返回True,否则返回False
def check_balance_number(n):
if n<10:
return False
else:
n=str(n)
odd_position=list(map(int,n[::2]))
even_position=list(map(int,n[1::2]))
if sum(odd_position)!=sum(even_position):
return False
else:
return True
#主程序
low,high=eval(input('pls input low,high='))
a=[]
for i in range(low,high+1):
if check_balance_number(i):
a.append(i)
print(f'在区间[{low},{high}]内有平衡数{a}共{len(a)}个')
运行实例一
pls input low,high=200,300
在区间[200,300]内有平衡数[220, 231, 242, 253, 264, 275, 286, 297]共8个
运行实例二
pls input low,high=1,50
在区间[1,50]内有平衡数[11, 22, 33, 44]共4个
运行实例三
pls input low,high=2134,2134
在区间[2134,2134]内有平衡数[2134]共1个
如下: