计数器问题分析_HAPPYLTF_百度空间

【问题描述】

    一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个012,…,9。其中—个页码不含多余的0,如N1234时第5页不是0005,只是5

【输入】

       一个正整数N(N109),表示总的页码。

【输出】

       共十行:第k行为数字k-1的个数。

【样例】

       count.in                        count.out

       11                                1

                                          4

                                          1

                                          1

                                          1

                                          1

                                          1

                                          1

                                          1

                                          1

【算法分析】 可以从连续数字本身的规律出发来进行统计,这样速度比较快,先不考虑多余的0的情况,假设从0000~9999,这一万个连续的数,0到9用到的次数都是相同的,一万个四位数,0到9这十个数字共用了40000次,每个数字使用了4000次。 进一步推广,考虑所有的n位数情况,从n个0到n个9,共10n个n位数,0到9十个数字平均使用,每个数字共用了n*10n-1次。 以n=3657为例:(用count数组来存放0到9各个数字的使用次数) {zg}位(千位)为3,从0千、1千到2千,000~999重复了3次,每一次从000到999,每个基本数字都使用了3*102=300次,重复3次,所以count[0]~count[9]各增加3*300; 另外{zg}位的0到2作为千位又重复了1000次,count[0]~count[2]各增加1000,3作为千位用了657次(=n mod 100),因此count[3]增加657; 每一位要做三件事情:(4236) 1、count[0]到count[9]的平均数。4236应该是(4×1000*3)/10。(4次,每次都是3位数) 2、0到该位数-1,都重复了10的位数-1次方。4236,0-3都增加1000次。 3、改位数值4要加上后面的236次。 {zh1}再减去多算的0的个数。 那么0到底多算了多少次呢? 当没有十位及以更高位



郑重声明:资讯 【计数器问题分析_HAPPYLTF_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——