[枚举] 微软2012年9月22日校园招聘笔试题 第6题

http://blog.csdn.net/hackbuteer1/article/details/7443007

关于第六题 这个博客上是这么写:

“6、1,2,3,…1000 一共出现了多少个0
A、189
B、191
C、193
D、195
算出来是192个可是没有这个答案估计题目出错了。”

最后我的结论跟博主一样。虽然是道水题,但是博主写得如此模糊令人不爽,我贴个认真版的思路:

出现0的个数=只有个位是0的+只有十位是0的+个位十位都是0的+百十个位都是0的,那么:

1、只有个位是0的:

10 110 …… 910 ||

20 120 …… 920 ||

30 130 …… 930 ||

...                    共9行

...                    ||

90 190 …… 990 ||     

===共10列====

上面9行10列的每个数字只有1个0,那么只有个位是0的个数:9*10*1=90

2、只有十位是0的

101 …… 109 ||

202 …… 209 ||

……            共9行

……              ||

901 …… 909 ||

===共9列=== 

上面9行9列的每个数字也只有1个0,那么只有十位是0的个数:9*9*1=81

3、个、十位都是0的

100 200 300 …… 900

====共9个======

上面9个数字都有2个0,那么个、十位都是0的个数:9*2=18 

4、百、十、个位都是0的

显然只有1000这个数字,那么百、十、个位都是0的个数:1*3=3

综上,出现0的个数

=只有个位是0的+只有十位是0的+个位十位都是0的+百十个位都是0的

=90+81+18+3

192

**********************************************************

有个同学用类似的方法算出191:

个位是0的:10~1000 每10个里边有1个,那么个位为0的数字有100个

十位是0的:100~1000 每100个里边有10个,那么十位是0的数字有90个(其实是91个他忘记把1000算进去了)

百位是0的:1000  就1个

当然我们看到中间已经出错了,他用(1000-100)/100*10来算的,但是1000就没有被算进去

所以还是192其实。

**********************************************************

最后附个代码(当然结果还是192):

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int num=1;
 6     int result=0;
 7     for(;num<1001;num++)
 8     {
 9         int temp=num;
10         while(temp)
11         {
12             if(temp%10==0)
13                 result++;
14             temp/=10;
15         }
16     }
17     cout<<result<<endl;
18     system("pause");
19     return 0;
20 }
原文地址:https://www.cnblogs.com/zeedmood/p/3000405.html