码迷,mamicode.com
首页 > 其他好文 > 详细

不要62 HDU2089

时间:2019-12-11 00:08:24      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:strstr   targe   mit   family   mil   ret   print   clu   ref   

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 }

 

 

不要62 HDU2089

标签:strstr   targe   mit   family   mil   ret   print   clu   ref   

原文地址:https://www.cnblogs.com/Arrokoth/p/12019448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!