zoukankan      html  css  js  c++  java
  • UVA11038

    题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173

    解题思路:

      求出 0 到 m-1 这些数字中 0 出现的次数(此处要特判 m = 0 的情况),再求出 0 到 n 这些数字中 0 出现的次数,后者减去前者即是答案。

      求 0 到某一个数字这些数字中 0 出现的次数:

      从第二高位枚举每一位上 0 出现的次数:1、这一位上的数字是 0,我们以 10030 的百位为例,这一位上的 0 出现的次数为:(10 - 1)*100 + 30 + 1;2、这一位上的数字不是0,我们以 10330 的百位为例,这一位上的 0 出现的次数为:10*100。别忘记考虑 0 哦,所以得出的答案再加上 1 才是正解。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 typedef long long ll;
     6 
     7 int main(){
     8     ll m,n;
     9     while(scanf("%lld%lld",&m,&n)==2&&m>=0&&n>=0){
    10         m--;
    11         ll ans1=0;
    12         if(m>=0){
    13             ll t1=1;
    14             while(m/t1>=100)
    15                 t1*=10;
    16             while(t1){  //判断条件
    17                 if(m/t1%10!=0)
    18                     ans1+=m/(t1*10)*t1;
    19                 else
    20                     ans1+=((m/(t1*10)-1)*t1+m%t1+1);
    21                 t1/=10;
    22             }
    23             ans1++;
    24         }
    25         else
    26             ans1=0;
    27 
    28         ll ans2=0, t2=1;
    29         while(n/t2>=100)
    30             t2*=10;
    31         while(t2){
    32             if(n/t2%10!=0)
    33                 ans2+=n/(t2*10)*t2;
    34             else
    35                 ans2+=((n/(t2*10)-1)*t2+n%t2+1);
    36             t2/=10;
    37         }
    38         ans2++;
    39         printf("%lld
    ",ans2-ans1);
    40     }
    41     return 0;
    42 }
    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    Python学习资料
    异常
    I/O
    Python3+迭代器与生成器
    python标准数据类型
    人工智能、机器学习和深度学习
    原地排序和复制排序
    序列化和Json
    登陆加密小程序
    hashlib模块加密用法
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/7654067.html
Copyright © 2011-2022 走看看