2005-11-23 18:12
寂寞空手道
塌先生这个题目看似简单,其实蛮难的。主要是后面不是一个完整的数段,而是截止到200620062006了,这样就必须要重新推算从200000000000到200620062006只见有多少个零出现。
我的算法是:
考虑到0-9这是个数字是顺序出现的,所以每个数位上0出现的频率是相同数位的所有自然数的1/10。解释一下就是0在10-99这90个数的个位出现9次,在100-999这900个数中,个位出现90次,十位出现90次。由此得出一个公式:
零在所有某位数中出现的次数=(数位-1)*9*10^(数位-2)。带入数位得到:
零在所有个位数中出现的次数=(1-1)*9*10^(1-2)=0
零在所有两位数中出现的次数=(2-1)*9*10^(2-2)=1*9*10^0=9
零在所有三位数中出现的次数=(3-1)*9*10^(3-2)=2*9*10^1=180
。。。
零在所有十一位数中出现的次数=(11-1)*9*10^(11-2)=10*9*10^9=90,000,000,000
由于十二位数截止到200620062006,因此上面的公式只能算到99,999,999,999,从100,000,000,000到200,620,062,006就不适用了。
不过从100,000,000,000到199,999,999,999还是很容易算出来的,所有的0出现的次数=(12-1)*1*10^(12-2)=11*1*10^10=110,000,000,000。
比较麻烦的是从200,000,000,000到200,620,062,006,目前我还不知道怎么推出公式,如果硬算的话就太麻烦了。那位朋友有更好的方法?还请不吝赐教!
2005-11-26 03:38
俺是马甲
[quote]原帖由[i]重阳[/i]于2005-11-24, 17:46:53发表
这个命题好象不成立啊。
取N=110,[N/10]=11
从1到11,所有数字的位数和是13,而0的出现次数是
1-99,9个
100,2个,
101-109,9个,
110,1个
用这个方法,似乎只能计算数字末尾的0,包括与末位0相连的,如10000,四个0都算上了。但101这样位于中间的,就没有计入。 [/quote]
我厚颜无耻的写上我的想法,大家莫拍
窃以为如果算出每一位重复了多少次从1到0(每位最先出现时都是1!)
可能好些,这样可以避免区分讨论0是被夹还是不是
对于第一位,那时显然好算得,对于高位,只不过
是重复的周期不是1,而是10的幂次,所以算得时候要注意截断
用这样的苯办法一位一位算,总是可以算得出来的,呵呵
不过,也应该可以进一步总结出更一般的式子
2005-11-26 10:35
天宫公主
用寂寞空手道的思路....0-999: 100个.
1000 - 1999 = 100 (前面算过的)+ 1(百, 十, 个全零的)+10(百十全零)+100 (百位为零) = 211
2000 - 2006 = 3 + 2.6 = 15.
所以, 1 - 2006 = 100 + 211 + 15 - 1 = 325.
----------------------------------------------------------------------------
0 - 9999 - 1000个
N0000 - N9999 (N为任何数字, N0000 = N万): 1000(前面算过的) + 1000 (千位为零) + 100 (千百位为零) + 10 (千百十位为零) + 1 (千...个位为零) = 2111.
所以, 10000 - 59999 = 2111 x 5 = 10555
则1 - 60000: 10555 - 1 + 4 = 10558.
则1 - 62006: 10558 + 325 = 10880
----------------------------------------------------------------------------
以此规律可推出 1-200620062006. 算累了... 后面的以后再说吧.