您的位置:首页 > 其它

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

2014-12-19 19:55 381 查看

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==1 && x==0 && m<100000)
{
return 1;
}
int i,j;
i=m%10;
j=m/10;
if(j!=0 && i!=x)
return is(x,j,0);
else if( i==x)
return 1;
else
return 0;
}
int not(int k,int m,int flag)
{
if(flag==1 && k==0 && m<100000)
{
return 0;
}
int i,j;
i=m%10;
j=m/10;
if(j!=0 && i!=k)
return not(k,j,0);
else if(i==k)
return 0;
else
return 1;

}

int dou(int m,int flag)
{
if(flag==1 && m<10000)
{
return 1;
}
int a[6];
for(int i=0;i<6;i++)
{
a[i]=m%10;
m/=10;
}
for(int j=0;j<5;j++)
{
if(a[j]==a[j+1])
{
return 1;
}
}
return 0;

}
int main()
{
int x,k,l,r;
int n,count;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
count=0;
scanf("%d%d%d%d",&x,&k,&l,&r);
if(l>=0 && r>=l && r<=999999 && x>=0 && k>=0 && x<=9 && k<=9)
{
for(int i=l;i<=r;i++)
{
if(is(x,i,1) && not(k,i,1) && dou(i,1))
count++;
}
printf("%d\n",count);
}
}
}

return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: