不要62
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16975 Accepted Submission(s): 5566
Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <string.h> 3 #include <stdio.h> 4 #include <math.h> 5 #include <algorithm> 6 using namespace std; 7 long long p[20][3],a[10]; 8 void init() 9 { 10 int i; 11 memset(p,0,sizeof(p)); 12 p[0][0]=1; 13 for(i=1; i<10; i++) 14 { 15 p[i][0]=p[i-1][0]*9-p[i-1][1];//无4和62 16 p[i][1]=p[i-1][0];//无4,高位为2 17 p[i][2]=p[i-1][2]*10+p[i-1][1]+p[i-1][0];//有4或有62 18 } 19 } 20 int fun(int x) 21 { 22 int len=0,i,an=0; 23 x++; 24 int t=x; 25 while(x) 26 { 27 a[++len]=x%10; 28 x/=10; 29 } 30 a[len+1]=0; 31 bool flag=0; 32 for(i=len; i>0; i--) 33 { 34 an+=a[i]*p[i-1][2]; 35 if(flag)an+=a[i]*p[i-1][0]; 36 if(!flag&&a[i]>6)an+=p[i-1][1]; 37 if(!flag&&a[i]>4)an+=p[i-1][0]; 38 if(!flag&&a[i+1]==6&&a[i]>2)an+=p[i][1]; 39 if(a[i]==4)flag=1; 40 if(a[i+1]==6&&a[i]==2)flag=1; 41 } 42 return t-an; 43 } 44 int main() 45 { 46 int n,m; 47 init(); 48 while(cin>>n>>m) 49 { 50 if(n==0&&m==0)break; 51 cout<<fun(m)-fun(n-1)<<endl; 52 } 53 }