zoukankan      html  css  js  c++  java
  • 不要62 HDU2089

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 

    解题思路:
    对于这道题,猛一看到脑袋里出现的就是暴力的做法,当然不能这样,会TLE。
    打表是一定要打的。但是如何打的优美就是一个值得思考的问题了。这里我了解到一个很好的找数字里面有无62或4的方法。
    我们可以将数字 n itoa 函数转换成字符串,然后用查询子串的方法找 n 中是否含有62、4。
    说到打表,我们可以建立一个数组dp[n],来记录从1~n中出现62、4的数字。但是要注意一点的是,如果n中即包含62又包含4,那么我们这里还是只统计一次的。
     
    代码:
     
     1 #include<math.h>
     2 #include<ctype.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<limits.h>
     7 #include<stdlib.h>
     8 
     9 #define N 100010
    10 #define fl 0x555555555
    11 
    12 typedef long long int ll;
    13 
    14 int dp[1000010];
    15 char num[1000010];
    16 int main()
    17 {
    18     int n, m;
    19     int i;
    20     memset(dp, 0, sizeof(dp));
    21     for(i=1;i<=1000000;i++)
    22     {
    23         itoa(i, num, 10);
    24         dp[i]=dp[i-1];             //将i前一个数字的统计值存入dp[i],以便后续的使用
    25         if(strstr(num, "4")!=NULL)
    26             dp[i]+=1;
    27         else if(strstr(num, "62")!=NULL)  //如果字符串中已经出现过4的话就跳过这个语句了
    28             dp[i]+=1;
    29     }
    30     while(scanf("%d%d", &n, &m), n||m )
    31     {
    32         printf("%d\n", (m-n+1)-(dp[m]-dp[n-1]));  //输出n~m中不含4、62的数字的个数
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    修改MySQL的数据目录
    Ubuntu安装Sublime Text3插件Emmet的依赖PyV8
    ThoughtWorks的面试总结
    使用百度地图做地理追踪
    Make a plan
    ubuntu 下php + nginx
    编译Nginx
    CSS清除浮动
    关于项目提测质量的一点思考
    Jenkins配置
  • 原文地址:https://www.cnblogs.com/Arrokoth/p/12019448.html
Copyright © 2011-2022 走看看