一个小学数学题引发的血案

来源:互联网 发布:淘宝怎么抢红包 编辑:程序博客网 时间:2024/05/16 19:15

前几天给弟弟补习的时候发现的这道有意思的题目:

1~5122这个范围内的整数一共有多少个零,例如100就是2个零。

初看到这题的时候让我想到了递归算法(小学真牛逼),可感觉还是很麻烦。大家有没有什么好想法呀,如果能用程序实现更好了

 

 

发到论坛上大家讨论了一下。(很意外,这题居然大家讨论得这么火热,刚开始玩csdn,感觉不错^_^)

 

看到这个题目的时候一开始也是暴力法解决,不过后来发现了其中规律,个人是这么算的。。。

 

先计算1~10,不用说1个

然后1~100,也就是1*10-0+1=11。

再然后是1~1000,也就是(11+9)*10-9+1=192(9个01……09)

那么5122就是(192+99+9)*5+(11+9)*1+2=1522(99个001……099,9个001……000)

 

如果数字大,以此类推。。。

1~10000,就是(192+99+9)*10-(99+9)+1=2893

有点动态规划的意思,不过还是过于繁琐。。。于是放到论坛里看看大家的算法。

 

稍微总结一下,看的几种类型的解法:

 

首先是这个方法:

 

穷举,虽然暴力,不过问题是完全解决啦。不多解释了

 

 

更暴力:

 

 

比较好的方法,效率挺高的^_^

 

 

如果是用人脑嘛

 

个位有零情况:5122/10=512
十位有零情况:(5122/100)*10=510//0,1,2……9
百位有零情况:(5122/1000)*100=500
all:1522个0

 

这个算法最简单,也很快捷。不过对1000,100这样的数时就有问题,是因为计算了01,0101,001这样的东西,去掉就好啦。

 

原创粉丝点击