2719. 统计整数数目
难度:困难
问题描述:
给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。
如果一个整数 x 满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum.
请你返回好整数的数目。答案可能很大,请返回答案对 109 + 7 取余后的结果。
注意,digit_sum(x) 表示 x 各位数字之和。
示例 1:
输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8
输出:11
解释:总共有 11 个整数的数位和在 1 到 8 之间,分别
是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。
示例 2:
输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5
输出:5
解释:数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5 。所以我们返回 5 。
分析:
本题应该不难,但却设置为困难。或者正应了一句话,叫“会者不难,难者不会”。
程序如下:
#函数digit_sum(x)计算x各位数字之和并返回
def digit_sum(x):
y=list(x)
return sum(map(int,y))
#输入
num1=input('pls input num1=')
num2=input('pls input num2=')
min_sum=int(input('pls input min_sum='))
max_sum=int(input('pls input max_sum='))
#设置计数器n,用于统计好整数个数
n=0
#用循环对介于min_num和max_num之间的整数进行好整数检验
for i in range(int(num1),int(num2)+1):
if min_sum<=digit_sum(str(i))<=max_sum:
print(i,end=' ')
n=n+1
#清除不换行格式
print()
print(f'共有{n}个好整数')
运行实例1:
pls input num1=5
pls input num2=20
pls input min_sum=8
pls input max_sum=12
8 9 17 18 19
共有5个好整数
运行实例2:
pls input num1=1
pls input num2=12
pls input min_sum=1
pls input max_sum=8
1 2 3 4 5 6 7 8 10 11 12
共有11个好整数
运行实例3:
pls input num1=3
pls input num2=29
pls input min_sum=1
pls input max_sum=20
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
共有27个好整数
感悟:循环是人生的常态,古有“六道轮回”之说,轮回轮回又轮回,让人直感叹前世今生之变幻莫测;时间周而复始,一天一天,一个星期又一个星期,一年又一年,岁月悠悠更觉人生之美好,这一切无不体现循环之美妙神奇,循环也让我们更加明白人生的道理,很多事情往往要经历枯燥甚至痛苦的人生磨炼,艰难地等待,循环往复,最后才能取得成功。“复杂的事情简单做,你就是专家。简单的事情重复做,你就是行家。重复的事情用心做,你就是赢家”,人生贵在坚持。