Problem 12. 不要62
题目简述:
对于每次给出的一个牌照区间号,推断出要实际上给多少辆新的士车上牌照了。车牌号中不包含不吉利数字4和62(连号)。
解题思路:
首先,我是用一个数组b来存放每个车牌号的每个数字用于判断车牌号是否可用,另一个数组a用来存放车牌号的状态(1代表可用车牌号,0则代表不可用),最后将数组a求和即可用的车牌号数。
细节处理:
用数组b判断车牌号是否可用时,只要有一位数为不吉利数字即可跳出循环,用于减少循环次数。如if(b[j]==4){ a[i]=0; break; }
源代码:
#include<iostream>
using namespace std;
int a[1000010],b[10];
int main()
{
int i,x,y,j,k,sum;
for(i=0;i<1000010;i++)
{
k=i;
a[i]=1;
for(j=0;k!=0;j++)
{
b[j]=k%10;
k/=10;
}
while(j--)
{
if(b[j]==4)
{
a[i]=0;
break;//遇到4跳出即可,减少循环次数
}
else if(b[j]==6)
{
if(b[j-1]==2)
{
a[i]=0;
break;
}
}
}
}
while(cin>>x>>y)
{
sum=0;
if(!x&&!y)
break;
else
{
for(i=x;i<=y;i++)
sum+=a[i];
}
cout<<sum<<endl;
}
}