武汉科技大学ACM:1010: 电话号码

时间:2023-03-09 02:44:56
武汉科技大学ACM:1010: 电话号码

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 ;
}