题目描述
万圣节有一个Party,XadillaX显然也要去凑热闹了。因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了。很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪:
-
门票号是由0~6组成的六位数(0~6这几个数字可重用)
-
每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的)
-
每一个门票号相邻的两位相差必须在四以下(≤4)(如016245是不行的)
输入
第一行一个n,代表输入个数
接下去n行,每行两个数字x,y(x <= y)
接下去n行,每行两个数字x,y(x <= y)
输出
对于每个测试,输出x到y之间的门票编号。每个测试结尾之间空行。
样例输入
2 001001 001002 001011 001012
样例输出
001001 001002 001011 001012
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int a[10];
while(n--)
{
int x,y;
scanf("%d %d",&x,&y);
for(int i=x; i<=y; i++)
{
int v,p,g; //pvg为标志
v=p=g=0;
a[5]=i%10; //把每一位存入数组
a[4]=i/10-(i/100)*10;
a[3]=i/100-(i/1000)*10;
a[2]=i/1000-(i/10000)*10;
a[1]=i/10000-(i/100000)*10;
a[0]=i/100000;
for(int j=0; j<6; j++) //判断有没有大于6的数
if(a[j]>6)
{
g=1;
break;
}
for(int j=0; j<4; j++) //判断有没有三个数相连相同的,注意这只能到j=3,否则就错了
if(a[j]==a[j+1]&&a[j+1]==a[j+2])
{
v=1;
break;
}
for(int j=0; j<5; j++) //这只能到j=5
if(fabs(a[j+1]-a[j])>4)
{
p=1;
break;
}
if(v==0&&p==0&&g==0)
{
for(int j=0; j<6; j++)
printf("%d",a[j]);
printf("\n");
}
}
printf("\n");
}
}