题目描述
万圣节有一个Party,XadillaX显然也要去凑热闹了。因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了。很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪:
-
门票号是由0~6组成的六位数(0~6这几个数字可重用)
-
每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的)
-
每一个门票号相邻的两位相差必须在四以下(≤4)(如016245是不行的)
输入
第一行一个n,代表输入个数 接下去n行,每行两个数字x,y(x <= y)
输出
对于每个测试,输出x到y之间的门票编号。每个测试结尾之间空行。
样例输入
2 001001 001002 001011 001012
样例输出
001001 001002 001011 001012
代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{//n表示有n组数
int x,y;
int a[6]={0},i,t,j,k;
scanf("%d %d",&x,&y);
for(i=x;i<=y;i++)
{//用i来记录x到y之间的所有数
t=i;
j=0;
k=0;
while(t)//存数
{//将数t(i)各个位数一次存入arr[]中
a[j++]=t%10;
if(t%10>6)
{//不满足第一个规则
k=1;
break;
}
t=t/10;
}
if(k==0)
{//满足第一个规则时
for(j=0;j<4;j++)
{
if(a[j]==a[j+1]&&a[j+1]==a[j+2])
{//不满足第二个规则
k=1;
break;
}
}
for(j=0;j<5;j++)
{//不满足第三个规则
if((a[j]-a[j+1]<-4)||(a[j]-a[j+1]>4))
{
k=1;
break;
}
}
}
if(k==0)
{//此时数t满足所有的规则,原样输出
for(j=5;j>=0;j--)
{
printf("%d",a[j]);
}
printf("\n");
}
}
if(n)
{
printf("\n");
}
}
return 0;
}