
Problem Description
LXD打算换个手机号码,但是他去营业厅选号码的时候却把移动的客服小姐烦得不行,因为他太挑三捡四啦。对于一个手机号的后六位数字(前面五位他就无所谓了),LXD有很严格的要求,具体如下:
(1)一定要有数字x。
(2)不能有数字k。
(3)这个六位数的大小在区间[l,r]内。
(4)最少要有两个相邻的数字相同。
现在你要计算出这后六位数字有多少组是符合LXD要求的。
Input
第一行是一个正整数T,表示总共有T组数据。
接下来有T行(T组数据),每行有四个正整数x,k,l,r。0<=l<=r<=999999,0<=x,k<=9。
Output
每行输出一个整数,对应该组测试数据的答案,符合要求的号码数。
Sample Input
2
1 2 100000 100010
1 4 0 20
Sample Output
10
10
#include<stdio.h>
int is(int x,int m,int flag)
{
if(flag== && x== && m<)
{
return ;
}
int i,j;
i=m%;
j=m/;
if(j!= && i!=x)
return is(x,j,);
else if( i==x)
return ;
else
return ;
}
int not(int k,int m,int flag)
{
if(flag== && k== && m<)
{
return ;
}
int i,j;
i=m%;
j=m/;
if(j!= && i!=k)
return not(k,j,);
else if(i==k)
return ;
else
return ; } int dou(int m,int flag)
{
if(flag== && m<)
{
return ;
}
int a[];
for(int i=;i<;i++)
{
a[i]=m%;
m/=;
}
for(int j=;j<;j++)
{
if(a[j]==a[j+])
{
return ;
}
}
return ; }
int main()
{
int x,k,l,r;
int n,count;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
count=;
scanf("%d%d%d%d",&x,&k,&l,&r);
if(l>= && r>=l && r<= && x>= && k>= && x<= && k<=)
{
for(int i=l;i<=r;i++)
{
if(is(x,i,) && not(k,i,) && dou(i,))
count++;
}
printf("%d\n",count);
}
}
} return ;
}