算法设计与分析课后题,统计数字问题

参考这两篇文章写的,也就是参考答案的解法。
https://www.jb51.net/article/70467.htm (参考这个。
https://www.cnblogs.com/mr-cheneytao/p/9724191.html

大概意思是

9999=9000+900+90+9
=9999 +1 +999+1 +9
如数字1次数=9×3×102+ 9×2×101+9=2889
再加上 最高位的9 在0至9 之前的区间内每个数字出现了1000次**(9的话是算后面的数,如4567,4 应该是567次,而3是1000次。),所以1 再加1000,等于3889;
依次往低位,分别加 100、10 、1 (个位单独算),3889+100+10+1=4000;

至于0的情况,分两种,上面说的,最高位 0-9之间,0也出现了1000次,以及后面的低位,这不需要加的,所以,0的数字为,2889,
还有一种情况如页数为10310 这种中间有零的。如中间的零第4位,是要减去1000 次的,最后加上1,因为零也算一个。

总之就是零的情况相加比较特殊,其它的 按公式算,再加上多出现的(如99页的书,变成199页,那么1 是多出现了 100次的。),再搞定0的。就可以了。
可以用一个穷举法做一个对比判断结果是否正确。
代码就不贴了,写个思路。网上动不动就贴代码。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值