不要62

来源:互联网 发布:淘宝卖家如何拒绝退货 编辑:程序博客网 时间:2024/05/07 09:09
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 1000 0
 

Sample Output
80
#include <cstdio>  int d[1000000+11] = {0};  bool check (int x)      //判断是否为倒霉数   {      int t;      while (x)      {          t = x % 10;          if (t == 4)              return true;          else if (t == 2 && (x%100)/10 == 6)              return true;          x /= 10;      }      return false;  }  int main()  {      d[1] = 1;      for (int i = 2 ; i < 1000000 ; i++)      {          if (check(i))              d[i] = d[i-1];          else              d[i] = d[i-1] + 1;      }      int a,b;      while (~scanf ("%d %d",&a,&b) && (a || b))          printf ("%d\n",d[b] - d[a] + (check(a) ? 0 : 1));      return 0;  }  
#include<cstdio>
int a[1000010]={0};
int fac(int i)
{
while(i)
{
if(i%10==4)
 return 0;
else if(i%100==62)
 return 0;
i/=10;
}
return 1;
}
int main()
{
int n,i,j,m,t;
a[0]=0;a[1]=1;
for(i=2;i<=1000000;i++)
{
if(fac(i))
 a[i]=a[i-1]+1;
else a[i]=a[i-1];
}
while(scanf("%d%d",&n,&m)&&m||n)
{
int sum;
sum=a[m]-a[n]+(fac(n)?1:0);
printf("%d\n",sum);
}
return 0;
}
0 0
原创粉丝点击