这个问题让我很困惑;我们给了两个整数 A , B ,我们想要计算 [A,B] 范围内的数字出现次数。我想,如果我们可以计算 [0,A] 和 [0,B] 范围内的数字出现次数,那么其余的都是微不足道的。那么如何计算 [0,x] 范围内的数字出现次数? 这不是功课,这实际上是SPOJ的一个问题。 天真的方法是行不通的,因为A和B可以大到10 ^ 9.这里有一些例子:
输入:
1 10
输出:
1 2 1 1 1 1 1 1 1 1
输入:
44 497
输出:
85 185 185 185 190 96 96 96 95 93
答案 0 :(得分:9)
我会首先尝试蛮力方法来获得一些有用的东西。查看每个数字,遍历该数字的字符串表示中的每个字符,等等。
然而,有一种更简单的方法。
您可以对此进行概括,并通过一些努力得出一个公式,表示某个数字(0可能是特殊情况)中有多少会出现在某个范围内。您无需实际查看每个号码。
答案 1 :(得分:1)
Wolfram Alpha是你的朋友(至少在21 * 10 ^ 4附近有一些数字):
Input:
44 497
Output:
85 185 185 185 190 96 96 96 95 93
结果:
{85,185,185,185,188,96,96,96,95,93}
答案 2 :(得分:-1)
对于这类问题,在确定如何正确和快速地完成它之前,从一个缓慢而丑陋的实现开始通常是有用的。您可能会了解问题的结构,并且您可以使用慢速实现来测试快速实现的正确性。
例如,在Python中,您可能会编写这样的慢速版本(它不一定是最好的方法,但它是最短的......)
>>> A, B = 1, 100
>>> from collections import Counter
>>> Counter(''.join(map(str, range(A, B + 1))))
Counter({'1': 21, '3': 20, '2': 20, '5': 20, '4': 20,
'7': 20, '6': 20, '9': 20, '8': 20, '0': 11})