杭州人称那些傻乎乎粘嗒嗒的人为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
本来看到这个题还是有点不敢写的,毕竟觉得数很大,如果一个一个拆分的话很有可能会超时,但想了一会也没啥好方法。于是仔细想想这个题所需要的时间也并没有想象的那么长,1000000个数,每个数最多7位判断7次也就7000000次,再加上其他的也不过10000000次,还不到一秒呢,所以说应该是不会超时了,解决了这个心腹大患,这个题也就没有难度可言了;但是能简单最好还是简单点,毕竟这样算距离超时也不太远了;
解题思路:先将每个数都先算一遍,建立一个数组,如果这个数不好就把对应的值存为0,反之为0;最后在输入区间内找到可用 的累加在一块就好了;
Ac代码:
#include<stdio.h>
#include<string.h>
int a[1000100];
int main()
{
int i,j,k,s;
for(i=1;i<=1000100;i++)
{
a[i]=1;
j=0;k=i;
while(k!=0)
{
s=k%10;
k=k/10;
if(s==4 ||(s==2 && k%10==6))
{
a[i]=0;
// printf("%d* ",i);
}
}
//printf("%d& ",a[i]);
}
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
int sum=0;
if(m==0 && n==0)
break;
for(i=m;i<=n;i++)
sum+=a[i];
printf("%d\n",sum);
}
return 0;
}