码迷,mamicode.com
首页 > 其他好文 > 详细

NYOJ---题目733万圣节派对

时间:2015-03-22 10:39:38      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:

万圣节派对

时间限制: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之间的门票编号。每个测试结尾之间空行。
样例输入
2
001001 001002
001011 001012
样例输出
001001
001002

001011
001012
来源
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;
    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;
}






NYOJ---题目733万圣节派对

标签:

原文地址:http://blog.csdn.net/qq_qingtian/article/details/44535641

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!