• [枚举] 微软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 }
  • 相关阅读:
    STL常用容器☞String容器
    初识STL
    函数模板
    多态
    运算符重载
    友元
    对象的初始化和清理
    C++内存分区模型
    传值和传地址
    const的使用
  • 原文地址:https://www.cnblogs.com/zeedmood/p/3000405.html
Copyright © 2020-2023  润新知