[枚举] 微软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 }