题目链接

Problem Description

杭州人称那些傻乎乎粘嗒嗒的人为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

分析:

就是求出一个区间之内的数中,不含有62或者4的数的个数,用一个数组保存从1到n的满足条件的数的个数,如果当前数满足要求的话,就在上一个数的基础上加1,否则加0,就是当前数的个数。

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int luck(int x)
{
    while(x)
    {
        if(x%10==4||x%100==62)
        {
            return 0;
        }
        x/=10;
    }
    return 1;
}
int x[1000005];
int main()
{
    int i,n,m,s;
    for(i=1; i<1000005; i++)
    {
        x[i]=x[i-1]+luck(i);  //这个地方写得太好看了
    }
    while(scanf("%d%d",&n,&m)&&(n||m))
    {
        printf("%d\n",x[m]-x[n-1]);
    }
    return 0;
}
posted on 2017-05-03 17:08  渡……  阅读(249)  评论(0编辑  收藏  举报