万圣节派对
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
万圣节有一个Party,XadillaX显然也要去凑热闹了。因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了。很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪:
-
门票号是由0~6组成的六位数(0~6这几个数字可重用)
-
每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的)
-
每一个门票号相邻的两位相差必须在四以下(≤4)(如016245是不行的)
-
题意:输入一个6位数,在这6位数中不能出现超过三个重复的,也不能使相邻的两位数相差的值超过4,还有就是这个六位数不能出现超过6的数字,这道题就是一个坑,
做这道跪了N次。。。。
我一直wrong的代码:因为没有考虑数组控制的条件不一样,样例都能过去,就一直提交wrong了N次
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string>
#include<string.h>
using namespace std;
int a[1000010];
char b[10];
int a1[10];
bool zhuanhua(char b[])
{
for(int i=0;i<6;i++) //再次转化为整形
{
a1[i]=b[i]-'0';
}
int flag=1;
for(int i=0;i<6;i++) //错误的思想
{
if(a1[i]==a1[i+1]&&a1[i+1]==a1[i+2])
{
flag=0;
break;
}
if(fabs(a1[i+1]-a1[i])>4)
{
flag=0;
break;
}
if(a1[i]>6)
{
flag=0;
break;
}
}
if(flag)
return true;
else
return false;
}
int main()
{
int n;
int x,y;
cin>>n;
while(n--)
{
memset(b,0,sizeof(b));
int t=0;
for(int i=x;i<=y;i++)
{
a[t++]=i;
}
for(int i=0;i<t;i++)
{
sprintf(b,"%06d",a[i]); //把整数转化为字符型的数组里面存储
if(zhuanhua(b))
printf("%06d\n",a[i]);
}
printf("\n");
}
return 0;
}
正确的代码:
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string>
#include<string.h>
using namespace std;
int a[1000010];
char b[10];
int a1[10];
bool zhuanhua(char b[])
{
for(int i=0;i<6;i++)
{
a1[i]=b[i]-'0';
}
int flag=1;
for(int i=0;i<6;i++)
{
if(a1[i]>6)
{
flag=0;
break;
}
}
for(int i=0;i<4;i++)
{
if(a1[i]==a1[i+1]&&a1[i+1]==a1[i+2])
{
flag=0;
break;
}
}
for(int i=0;i<5;i++)
{
if(fabs(a1[i+1]-a1[i])>4)
{
flag=0;
break;
}
}
if(flag)
return true;
else
return false;
}
int main()
{
int n;
int x,y;
cin>>n;
while(n--)
{
memset(b,0,sizeof(b));
int t=0;
cin>>x>>y;
for(int i=x;i<=y;i++)
{
a[t++]=i;
}
for(int i=0;i<t;i++)
{
sprintf(b,"%06d",a[i]);
if(zhuanhua(b))
printf("%06d\n",a[i]);
}
printf("\n");
}
return 0;
}