有多少个数字包含一个给定的数字?

时间:2017-11-13 16:53:36

标签: algorithm math combinations

让我们有3位数字(100-999)。有多少这样的数字,至少有一个数字" 2"存在?

如何制作算法?还是数学函数?

2 个答案:

答案 0 :(得分:6)

包含 - 排除原则

有多少个3位数的数字2作为第一个数字(2xx)?那是对的 - 100。并作为第二个数字(x2x)? 100!而作为第三个(xx2) - 相同的数字。好的,现在我们有300个数字,但我们忘记了22x形式的数字,我们算了两次。现在我们需要减去22x2x2x22数字的数量。现在我们有270个,但我们忘记了号码222,我们添加了三次,减去了三次,我们需要再次添加:271。此解释是inclusion-exclusion principle的一个示例。

但这不是结束,我们需要将0xx个数字2减去数字。类似方法:271 - 10 - 10 + 1 = 252

动态编程

好的,如果你不喜欢以前的方法,还有另一种方法。让我们计算函数F(i, has2),其中i - 是数字的数字长度,has2布尔值,如果数字包含true则等于2,否则它等于false。重现关系如下:

 F(1, false) = 8, F(1, true) = 1
 F(i, true) = F(i-1, true) * 10 + F(i-1, false) 
 F(i, false) = F(i-1, false) * 9

答案是F(3, true)

 F(2, true) = 10 + 8 = 18
 F(2, false) = 8 * 9 = 72
 F(3, true) = 18 * 10 + 72 = 252      

答案 1 :(得分:1)

使用python的quick'n'dirty是:

n  = [x for x in range(100,999) if '2' in str(x)] 

print("There are " + str(len(n)) + " numbers between 100 and 999 containing at least one '2'")
print(n)

将其放入https://pyfiddle.io/进行测试。