南阳oj-万圣节派对

万圣节派对


描述 

     万圣节有一个Party,XadillaX显然也要去凑热闹了。因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了。很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪:

1.门票号是由0~6组成的六位数(0~6这几个数字可重用)

2.每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的)

3.每一个门票号相邻的两位相差必须在四以下(≤4)(如016245是不行的)

 分析

    这个题南阳oj给的测试数据比较简单,三个规则实现起来也比较简单 ,而在做这个题是关键要考虑到类似003556到003660这样的数据的自加进位问题。

关键代码

char* Add(char *p)    //自加函数
{
 int len;
 len=strlen(p)-1;
 p[len]+=1;           /*先让最后一位自加*/
 while(p[len]=='7')   /*若等于7*/
   {
     p[len]='0';     /*该位置0*/
     p[len-1]+=1;    /*前一位加1*/
     len--;          /*从后往前挨个儿检查*/
   }
   return p;
}

完整代码


#include<stdio.h>
#include<string.h>
char* Add(char *p)
{
	int len;
	len=strlen(p)-1;
	  p[len]+=1;
	while(p[len]=='7')
	{
		
    	p[len]='0';
    	p[len-1]+=1;
    	len--;
    }
   
    return p;
}
int lookup(char*p)  //检查数据是否符合三个规则
{
	int i,len;
	int flag=0;
	len=strlen(p)-1;
	for(i=0;i<=len-2;i++)
	{
	  if(p[i]==p[i+1]&&p[i+1]==p[i+2])
	  {
	  	flag=1;
		return 0;
	  }
    }
    for(i=0;i<len;i++)
    {
	  if(p[i+1]-p[i]<-4||p[i+1]-p[i]>4)
	  {
	  	flag=1;
	  	return 0;
	  }
    }
    if(flag)
      return 1;
    
}

int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		char a[7],b[7];
		scanf("%s %s",a,b);
		while(strcmp(a,b)!=0)  //自加条件
		{
			if(lookup(a)!=0)
			   printf("%s\n",a);
			strcpy(a,Add(a));
		}
		if(lookup(b)!=0)
		  printf("%s\n",b);
	}

}

猜你喜欢

转载自blog.csdn.net/gaoshanyangzhi_1999/article/details/80411238