NYOJ--万圣节派对

来源:互联网 发布:centos apache 目录 编辑:程序博客网 时间:2024/04/29 07:40

万圣节派对

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

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

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

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

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

输入
第一行一个n,代表输入个数
接下去n行,每行两个数字x,y(x <= y)
输出
对于每个测试,输出x到y之间的门票编号。每个测试结尾之间空行。
样例输入
2001001 001002001011 001012
样例输出
001001001002001011001012
解题:拿道题首先想到的是想用字符串来解决,这样感觉方便点,但是写了一半发现虽然规则很好判断但是两个字符串之间的递增模拟比较费时,所以还是考虑直接用整数来模拟
两个易错点:1.总共是六位数,并且每位的范围是0-6,所以在检测到一旦有某一位大于6,肯定不符合规则。2.输出的时候是输出六位数,所以如果前面有零的话一定要输出来,用下面这句话来控制输出。
printf("%.6d\n" , j);
另外需要将六位数进行分离出每个位,这样好判断。其中用到绝对值fabs(),它是针对double类型的,所以要强制转换一下。
s[0] = j % 10;s[1] = j / 10 % 10;s[2] = j / 100 % 10;s[3] = j / 1000 % 10;s[4] = j / 10000 % 10;s[5] = j / 100000 % 10;
下面贴出C语言代码
#include <stdio.h>#include <math.h>int main(){int n;scanf("%d" , &n);while(n--){int s[6];int a , b;scanf("%d %d" , &a , &b);for(int j=a ; j<=b; ++j){s[0] = j % 10;s[1] = j / 10 % 10;s[2] = j / 100 % 10;s[3] = j / 1000 % 10;s[4] = j / 10000 % 10;s[5] = j / 100000 % 10;bool flag = 1;int i;//判断是否为真的门票for(i=0; i<4; ++i){if(s[i] >6 || s[i+1] >6 || s[i+2] >6){flag = 0;break;}if(s[i] == s[i+1] && s[i] == s[i+2]){flag = 0;break;}if(fabs(double(s[i] - s[i+1])) >4 || fabs(double(s[i+1] - s[i+2]))> 4){flag = 0;break;}}if(flag){//输出printf("%.6d\n" , j);}}printf("\n");}return 0;}
下面的是C++代码,除了输入输出不同,核心代码都相同
#include <iostream>#include <math.h>#include <stdio.h>using std::cin;using std::cout;using std::endl;int main(){int n;cin >> n;while(n--){int s[6];int a , b;cin >> a >> b;for(int j=a ; j<=b; ++j){s[0] = j % 10;s[1] = j / 10 % 10;s[2] = j / 100 % 10;s[3] = j / 1000 % 10;s[4] = j / 10000 % 10;s[5] = j / 100000 % 10;bool flag = 1;int i;//判断是否为真的门票for(i=0; i<4; ++i){if(s[i] >6 || s[i+1] >6 || s[i+2] >6){flag = 0;break;}if(s[i] == s[i+1] && s[i] == s[i+2]){flag = 0;break;}if(fabs(double(s[i] - s[i+1])) >4 || fabs(double(s[i+1] - s[i+2])) > 4){flag = 0;break;}}if(flag){//输出printf("%.6d\n" , j);}}cout << endl;}return 0;}
0 0
原创粉丝点击