列表

详情


OR132. 车辆限行

描述

输入一个或多个车牌号码,多个以逗号分割开,再输入想查询的日期(数字,周几),输出该日期限行的车牌号

车牌号码有以下要求,只要取后五位,如:AD123,12101,车牌号不可能全是字母。

 *现在对尾号进行限制:尾号为1,9则周一限行,尾号为2,8则周二限行,尾号为3,7则周三限行 尾号为4,6则周四限行,尾号为5,0的周五限行,周六周日不限行。

 *尾号不为数字,则看第4位是否是数字,如果第4位还不是 数字,继续看第3位,以此下去,直到找到有数字的时候止.

 *由于用户不熟悉系统,有可能输入错误车牌,如车牌不满5位或大于5位、车牌全是字母、没用逗号分割等,如有输入错误情况 一律返回error

 *如输入没有问题则返回限行的车牌号,如没有,刚返回none

输入描述

一个或多个车牌号码

周几

输出描述

限行的车牌号,如没有限行的则返回none

示例1

输入:

Y008U,T8899
2

输出:

Y008U

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2020-06-24

#include<stdio.h>
int main()
{
  int i,j,d,n,l;
  char str[100][100];
  while(scanf("%s",str[n++])!=EOF);
  scanf("%d",&d);
   // printf("%d",n);
  for(i=0;i<n;i++)
  {
    l=strlen(str[i]);
    if(l<5||l>5)
    {
      printf("error");
    return 0;
    }
    for(j=0;j<l;j++)
    {
      if(d==1&&(str[i][l-1-j]==1||str[i][l-1-j]==9))
         {
           printf("%s",str[i]);
         break;
         }
          if(d==2&&(str[i][l-1-j]==2||str[i][l-1-j]==8))
         {
           printf("%s",str[i]);
         break;
         }
         if(d==3&&(str[i][l-1-j]==3||str[i][l-1-j]==7))
         {
           printf("%s",str[i]);
         break;
         }
         if(d==4&&(str[i][l-1-j]==4||str[i][l-1-j]==6))
         {
           printf("%s",str[i]);
         break;
         }
         if(d==5&&(str[i][l-1-j]==5||str[i][l-1-j]==0))
         {
           printf("%s",str[i]);
         break;
         }
      if(d==6||d==7)
      {
        printf("%s",str[i]);
      }
      }
    if(j==l)
      printf("none");
  }
  return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-08-23

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int panduan(char a,int n)
{
 
        if(n==1)
            if(a=='1'||a=='9')
                return 1;
            else 
                return 0;
        if(n==2)
            if(a=='2'||a=='8')
                return 1;
            else 
                return 0;
        if(n==3)
            if(a=='3'||a=='7')
                return 1;
            else 
                return 0;
        if(n==4)
            if(a=='4'||a=='6')
                return 1;
            else 
                return 0;
        if(n==5)
            if(a=='5'||a=='0')
                return 1;
            else 
                return 0;
}
int main()
{
    char str[10000]={'\0'};
    char s[6]={'\0'};
     
    int i=0,j,r;
    scanf("%s",str);
    int n;
    scanf("%d",&n);
    int len=strlen(str);
    int t=(len+1)/6;
    if((len+1)%6!=0)
    {  
        printf("error\n");
        return 0;
    }
    int num;
    for(i=5;i<=len;i+=6)
    {
        if(str[i]!=',')
        {  
            printf("error\n");
     
            return 0;
        }
        else
        {
            num=0;
            for(j=i-1;j>=i-5;j--)   
            {
             
                if(str[j]>='a'&&str[j]>='z'||str[j]>='A'&&str[j]>='Z')
                    num++;
            }
            if(num==5)
            {  
                printf("error\n");
     
                return 0;
            }
        }
 
    }
    int count=0;
 
    for(i=5;i<=len;i+=6)
    {
        for(j=i-1;j>=i-5;j--)   
        {
            if(str[j]>='0'&&str[j]<='9')
            {
             
                r=panduan(str[j],n);
                //printf("___r__i__%d  %d\n",r,i);
 
             
                if(r==1)
                {
                 
                    strncpy(s,&str[i-5],5);
                     
                    if(count==0)
                     
                        printf("%s",s);
                    else
                        printf(",%s",s);
 
                    count++;
                    //printf("____i__%d  \n",i);
                     
                     
             
                }
                else
                    break;
 
   
            } 
        }
 
        if(i==len)
			printf("\n");
    }
    if(count==0)
    {
        printf("none\n");
        return 0;
 
    }
    
    return 0;
}

上一题