标签:
万圣节有一个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; }
标签:
原文地址:http://blog.csdn.net/qq_qingtian/article/details/44535641