万圣节派对

万圣节派对

时间限制:1000 ms | 内存限制:65535 KB

难度:1

描述

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

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

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

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

输入第一行一个n,代表输入个数接下去n行,每行两个数字x,y(x <= y)输出对于每个测试,输出x到y之间的门票编号。每个测试结尾之间空行。样例输入2001001 001002001011 001012样例输出001001001002001011001012来源NBOJ-1004上传者

勿念情

题意:输入一个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;elsereturn 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;elsereturn 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;}

乐观者在灾祸中看到机会;悲观者在机会中看到灾祸

万圣节派对

相关文章:

你感兴趣的文章:

标签云: