3966.统计范围内的好整数
难度:困难
问题描述:
给你三个整数l,r和k。
如果一个数字中每一对相邻数位之间的绝对差都至多为k,则称该数字为好数。
返回在范围l,r(包含边界)内的好整数的数量。
值x和y之间的绝对差定义为abs(x-y)。
示例1:
输入:l=10,r=15,k=1
输出:3
解释:
范围内的好整数有10、11和12。
对于10,abs(1-0)=1。
对于11,abs(1-1)=0。
对于12,abs(1-2)=1。
所有这些差值都至多为k=1。因此,答案为3。
示例2:输入:l=201,r=204,k=2
输出:2
解释:
范围内的好整数有201和202。
对于201,abs(2-0)=2且abs(0-1)=1。
对于202,abs(2-0)=2且abs(0-2)=2。
因此,答案为2。
提示:
10<=l<=r<=10**15
0<=k<=9
问题分析:
这是一个采用枚举算法的问题,主要解决如何判断一个整数是好整数,然后利用给定的整数范围,不断枚举,检验是好整数则输出并统计好整数个数。函数if_a_good_number(num,k),帮助判断整数num各相邻数字之差是否不大于k,从而确认num是否为好整数,返回判断的逻辑值。
程序如下:
python
#判断一个整数是不是一个好整数,如果是,返回True,否则返回False
def if_a_good_number(num,k):
num=str(num)
n=len(num)
for i in range(1,n):
a=int(num[i-1])
b=int(num[i])
if abs(a-b)>k:
return False
else:
return True
#主程序
l=int(input('pls input l='))
r=int(input('pls input r='))
k=int(input('pls input k='))
c=0
print(f'在[{l},{r}]内好整数有:')
for i in range(l,r+1):
if if_a_good_number(i,k):
c=c+1
print(i,end=' ')
print()
print('共有好整数',c,'个')
运行实例一
pls input l=20
pls input r=30
pls input k=1
在20,30内好整数有:
21 22 23
共有好整数 3 个
运行实例二
pls input l=234
pls input r=300
pls input k=2
在234,300内好整数有:
234 235 242 243 244 245 246
共有好整数 7 个