计算非弹性数字的Python程序
如果任何数字以这样一种方式表示,当我们从左到右阅读它时,每个第 i个数字大于或等于第 i-1个数字被称为递增数字。如果任何数字的位数从左到右递减,则称为递减数。
例子:
Increasing Number ?235668
all the digits from left to right are greater or equal to the previous digit.
Decreasing Number ? 653221
all the digits from left to right are lesser than or equal to the previous digit.
但是,如果这个数字既不增加也不减少,则称为Bouncy Number 。
例子:
523469 -> Some Digits from left to right are decreasing from left to right and some are increasing. So this is the example of Bouncy Number.
本文的任务是统计 10 k以下的 Non-Bouncy Numbers 的总数,并在 mod(10 9 +7) 中打印最终计数。为此,我们将使用星条法来计算给定范围内的非弹性数字的数量。
星条法:
星条法是一种用于处理基于组合的问题的技术。当我们想要相同组的数量时,就会出现这类问题。
计算相同组的公式:
其中 N 是相同的对象,M 是容器或范围。
最终公式:
例子:
Input : k = 6
Output : 12951
Input : k = 9
Output : 140906
下面是实现:
Python3
# import redunce function from functools
from functools import reduce
# define a function to
# calculate nCr
def nCr(n, k):
# this approach is based on
# approach of stars and bar method
# using reduce and lambda function
# to calculate number & denom
number = reduce(lambda x, y: x * y,
list(range(n, n - k, -1)))
denom = reduce(lambda x, y: x * y,
list(range(1, k + 1)))
# denom root of number will be the final result
return number // denom
# Driver Code
# input value of k
k = 6
# calculating r using function call
r = int((nCr(k + 10, 10) +
nCr(k + 9, 9)
- 2 - 10 * k))
# print final result
print(r % (1000000000 + 7))
输出:
12951