不要62

杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 
不吉利的数字为所有含有4或62的号码。例如: 
62315 73418 88914 
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。 
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。 

Input

输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。 

Output

对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。 

Sample Input

1 100
0 0

Sample Output

80


 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<stack>
 8 #include<deque>
 9 #include<map>
10 #include<iostream>
11 using namespace std;
12 typedef long long  LL;
13 const double pi=acos(-1.0);
14 const double e=exp(1);
15 const int N = 1000100;
16 
17 #define lson i << 1,l,m
18 #define rson i << 1 | 1,m + 1,r
19 
20 int dp[15][15],d[15];
21 
22 void init()
23 {
24     int i,j,k;
25     dp[0][0]=1;
26     for(i=1; i<=9; i++)
27         for(j=0; j<=9; j++)
28             for(k=0; k<=9; k++)
29                 if((j==6&&k==2)||j==4)
30                     ;
31                 else
32                     dp[i][j]+=dp[i-1][k];
33 }
34 int solve(int n)
35 {
36     int ans=0;
37     int len=0;
38     while(n)
39     {
40         ++len;
41         d[len]=n%10;
42         n=n/10;
43     }
44     d[len+1]=0;
45     d[len+2]=0;
46     for(int i=len; i>=1; --i)
47     {
48         if(d[i+1]==4||(d[i+2]==6&&d[i+1]==2))
49             break;
50         for(int j=0; j<d[i]; j++)
51             if(j==4||(j==2&&d[i+1]==6))
52                 ;
53             else
54                 ans+=dp[i][j];
55     }
56     return ans;
57 }
58 int main()
59 {
60 
61     int m,n;
62     int a,b;
63     init();
64     while(scanf("%d%d",&m,&n)!=EOF)
65     {
66         if(m==0&&n==0)
67             break;
68         a=solve(n+1);
69         b=solve(m);
70         printf("%d\n",solve(n+1)-solve(m));
71     }
72     return 0;
73 }
View Code

 



posted @ 2018-08-09 18:53  Daybreaking  阅读(180)  评论(0编辑  收藏  举报