首页 > 试题广场 >

车辆限行

[编程题]车辆限行
  • 热度指数:1227 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

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

车牌号码有以下要求,只要取后五位,如: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
依照题意写一堆条件判断就行,但是需要注意一点,只要一堆车牌中有一个不合法就输出error,因此不能边判断边输出。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] nums = br.readLine().trim().split(",");
        int day = Integer.parseInt(br.readLine().trim());
        boolean flag = false;
        ArrayList<String> list = new ArrayList<>();   // 限行牌照
        for(String num: nums){
            if(!check(num)){
                flag = true;
                break;
            }else{
                int rearNum = getRearNum(num);     // 获得尾号
                if(rearNum == -1){
                    flag = true;
                    break;
                }
                if((rearNum == 1 || rearNum == 9) && day == 1){
                    list.add(num);
                }else if((rearNum == 2 || rearNum == 8) && day == 2){
                    list.add(num);
                }else if((rearNum == 3 || rearNum == 7) && day == 3){
                    list.add(num);
                }else if((rearNum == 4 || rearNum == 6) && day == 4){
                    list.add(num);
                }else if((rearNum == 0 || rearNum == 5) && day == 5)
                    list.add(num);
            }
        }
        if(flag){
            System.out.println("error");
        }else{
            if(list.isEmpty())
                System.out.println("none");
            else{
                for(int i = 0; i < list.size(); i++)
                    System.out.println(list.get(i));
            }
        }
    }
    
    private static boolean check(String num) {
        for(int i = 0; i < num.length(); i++){
            char c = num.charAt(i);
            if(c >= '0' && c <= '9') return true;
        }
        return num.length() == 5;
    }
    
    private static int getRearNum(String num){
        for(int i = num.length() - 1; i >= 0; i--){
            char c = num.charAt(i);
            if(c >= '0' && c <= '9') return c - '0';
        }
        return -1;
    }
}

发表于 2021-04-15 17:42:43 回复(0)
#include <bits/stdc++.h>

using namespace std;

vector<string> Split(string s)
{     vector<string> num;     string t;     int l = s.length();     int i = 0, p = 0;     for(i=0;i<l;i++)     {         if(s[i]==',')         {             t = s.substr(p,i-p);             num.push_back(t);             p = i+1;         }     }     t = s.substr(p,i-p);     num.push_back(t);     return num;
}

//-1:error  0:none  1:ban
int Judge(string s, int day)
{     int l = s.length();     if(l!=5)         return -1;              bool hasNum = false;     for(int i=l-1;i>=0;i--)     {         if(isdigit(s[i]))         {             hasNum = true;             int m = s[i]-'0';             if((m==day) || (m+day==10) || (m==0&&day==5))                 return 1;             return 0;         }     }     if(!hasNum)         return -1;     else         return 0;
}

int main()
{     string s;     vector<string> num,res;     getline(cin,s);         num = Split(s);     bool flag = false;     int day,r;     cin>>day;          for(unsigned int i=0;i<num.size();i++)     {         r = Judge(num[i], day);         if(r==-1)         {             break;         }else if(Judge(num[i], day)==1){             res.push_back(num[i]);             flag= true;         }     }     if(r==-1)         cout<<"error"<<endl;     else if(!flag)         cout<<"none"<<endl;     else{         for(unsigned int i=0;i<res.size();i++)             cout<<res[i]<<endl;     }              return 0;
}

发表于 2019-01-15 21:29:25 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main()
{
    char S[1000], A[100][10], B[100][10];
    gets(S);
    int day, i, j = 0, k = 0, N[100] = {0}, flag = 0, num = 0, none = 1;
    scanf("%d", &day);
    if(day > 7 || day < 1)
    {
        printf("error_day\n");
        return 0;
    }
    if(day == 7 || day == 6)
    {
        printf("none\n");
        return 0;
    }
    for(i = 0; i < strlen(S); i++)
    {
        if(S[i] == ',')
        {
            j ++;
        }
        else
        {
            A[j][N[j]] = S[i];
            N[j] ++;
        }
    }
    for(i = 0; i <= j; i++)
    {
        if(N[i] != 5)
        {
            printf("error_num\n");
            return 0;
        }
        flag = 0;
        for(k = N[i] - 1; k >= 0; k--)
        {
            if(A[i][k] >= '0' && A[i][k] <= '9')
            {
                flag = 1;
                if(A[i][k] == day + '0' || A[i][k] == 10 - day + '0')
                {
                    strcpy(B[num], A[i]);
                    num ++;
                    none = 0;
                }
                else if((day == 5) && (A[i][k] == '0' || A[i][k] == '5'))
                {
                    strcpy(B[num], A[i]);
                    num ++;
                    none = 0;
                }
                break;
            }
        }
        if(flag == 0)
        {
            printf("error_zimu\n");
            return 0;
        }
    }
    if(none == 1)
    {
        printf("none\n");
        return 0;
    }
    for(i = 0; i < num; i++)
    {
        for(j = 0; j < 5; j++)
        {
            printf("%c", B[i][j]);
        }
        printf("\n");
    }
}

目测没啥错误。。。如有错误请指出。。。
发表于 2019-01-14 17:05:36 回复(2)
package main

import (
    "fmt"
    "strings"
    "os"
    "bufio"
)

var in=bufio.NewReader(os.Stdin)

func main() {
    s,_:=in.ReadString('\n')
    s=s[:len(s)-1]
    arr:=strings.Split(s,",")
    cnt:=map[int][]string{}
    for i:=1;i<=5;i++{
        cnt[i]=[]string{}
    }
    for _,si:=range arr{
        if len(si)!=5{
            fmt.Print("error")
            return
        }
        x:=-1
        for i:=len(si)-1;i>=0;i--{
            if si[i]>='0'&&si[i]<='9'{
                x=int(si[i]-'0')
                break
            }
        }
        if x==-1{
            fmt.Print("error")
            return
        }
        if x==1||x==9{
            cnt[1]=append(cnt[1],si)
        }else if x==2||x==8{
            cnt[2]=append(cnt[2],si)
        }else if x==3||x==7{
            cnt[3]=append(cnt[3],si)
        }else if x==4||x==6{
            cnt[4]=append(cnt[4],si)
        }else if x==5||x==0{
            cnt[5]=append(cnt[5],si)
        }
    }
    
    var d int
    fmt.Fscan(in,&d)
    if d<1||d>5||len(cnt[d])==0{
        fmt.Print("none")
    }else{
        for _,s:=range cnt[d]{
            fmt.Printf("%v ",s)
        }
    }
}

发表于 2023-03-21 20:50:23 回复(0)
import sys
def juage(carnumber,day):
    res=[]
    for x in carnumber:
        if len(x)!=5:
            return 'error'
        index = -1
        for i in range(0,5):
            if x[i] in ('0','1','2','3','4','5','6','7','8','9'):
                index=int(x[i])
        if index==-1:
            return 'error'
        elif day==1:
            if index==1 or index==9:
                res.append(x)
        elif day==2:
            if index==2 or index==8:
                res.append(x)
        elif day==3:
            if index==4 or index==6:
                res.append(x)
        elif day==5:
            if index==5 or index== 0:
                res.append(x)
    if len(res)==0:
        return 'none'
    else:
        return ','.join(res)
    return 'error'
carnumber = sys.stdin.readline().rstrip().split(',')
day = int(sys.stdin.readline())
print(juage(carnumber, day))
发表于 2021-04-01 16:47:23 回复(0)
#include<iostream>
#include<string>
#include<vector>
bool isshizimu(std::string s)
{
    for(int i=0;i<s.size();i++)
    {
        if(isdigit(s[i]))
        {
            return false;
            break;
        }
    }
    return true;
}
int main()
{
    std::string s;
    int a;
    while(std::cin>>s)
    {
        std::cin>>a;
        std::vector<std::string>t;
        if(s.find(",")==s.npos)
        {
            std::cout<<"error"<<std::endl;
        }
        while(s.find(",")!=s.npos)
        {
            int n=s.find(",");
            t.push_back(s.substr(0,n));
            s=s.substr(n+1);
        }
        t.push_back(s);
        for(int i=0;i<t.size();i++)
        {
            int b=0;
            if(t[i].size()!=5||isshizimu(t[i]))
            {
                std::cout<<"error"<<std::endl;
                break;
            }
            else
            {
                for(int j=4;j>=0;j--)
                {
                    if(t[i][j]>='0'&&t[i][j]<='9')b=t[i][j];
                }
            }
            if(a==1&&(b==1||b==9))std::cout<<t[i]<<" ";
            if(a==2&&(b==2||b==8))std::cout<<t[i]<<" ";
            if(a==3&&(b==3||b==7))std::cout<<t[i]<<" ";
            if(a==4&&(b==4||b==6))std::cout<<t[i]<<" ";
            if(a==5&&(b==5||b==0))std::cout<<t[i]<<" ";
        }
        std::cout<<std::endl;
    }
    return 0;
}
发表于 2020-09-18 23:59:01 回复(0)
菜鸡解法
#include <bits/stdc++.h>
using namespace std;

int zxw(string s)
{
	reverse(s.begin(), s.end());
	for (int i = 0; i < s.size(); i++)
		if (s[i] >= '0'&&s[i] <= '9')
			return (int)s[i];
	return 999;
}
int main()
{
	vector<string> vs, vs1;
	string s, ss;
	cin >> s;
	int x;
	cin >> x;
	bool cxk = 0, **** = 0;
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] != ',')ss += s[i];
		else
		{
			vs.push_back(ss);
			ss = "";
		}
	}
	vs.push_back(ss);
	for (int i = 0; i < vs.size(); i++)if (vs[i].size() != 5)cxk = 1;
	if (cxk)cout << "error";
	else
	{
		for (int i = 0; i < vs.size(); i++)
		{
			if (zxw(vs[i]) != 999)
			{
				int xq = 0;
				switch (zxw(vs[i]) - 48)
				{
				case 0:
					xq = 5; break;
				case 1:
					xq = 1; break;
				case 2:
					xq = 2; break;
				case 3:
					xq = 3; break;
				case 4:
					xq = 4; break;
				case 5:
					xq = 5; break;
				case 6:
					xq = 4; break;
				case 7:
					xq = 3; break;
				case 8:
					xq = 2; break;
				case 9:
					xq = 1; break;
				default:
					break;
				}
				if (xq == x)vs1.push_back(vs[i]);
			}
			else
			{
				cout << "error";
				**** = 1;
				break;
			}
		}
		if (vs1.size() == 0 && **** == 0)cout << "none";
		else if (**** == 0)for (auto i : vs1)cout << i << endl;
	}
}


发表于 2020-04-27 16:32:57 回复(0)
if __name__ == "__main__":
    try:
        line = raw_input()
        lines = line.split(",")
        n = len(lines)
        line = raw_input()
        day = int(line)
        flag = 0
        res = []
        for i in range(n):
            s = lines[i]
            if len(s)!=5:
                flag = 1
                break
            alert = 0
            for j in range(4,-1,-1):
                if s[j]>="0" and s[j]<="9":
                    alert = 1
                    if day == 1 and (s[j] == "1" or s[j] == "9"):
                        res.append(s)
                    if day == 2 and (s[j] == "2" or s[j] == "8"):
                        res.append(s)
                    if day == 3 and (s[j] == "3" or s[j] == "7"):
                        res.append(s)
                    if day == 4 and (s[j] == "4" or s[j] == "6"):
                        res.append(s)
                    if day == 5 and (s[j] == "5" or s[j] == "0"):
                        res.append(s)
                    break
            if alert == 0:
                flag = 1
                break
            
        if flag == 1:
            print "error"
        else:
            if len(res) == 0:
                print "none"
            else:
                print ",".join(res) 
    except:
        print "error"  

发表于 2019-05-14 18:44:56 回复(0)
循环嵌套不要太多,本人写了一个判断是否限号的调用函数,并在循环判断车牌号输入是否有问题的同时对合法车牌号进行处理
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int func(int a,int n)
{
    int e;
    if(n==6||n==7)
        return 0;
    if(a==1||a==9)
        e=1;
    else if(a==2||a==8)
        e=2;
    else if(a==3||a==7)
        e=3;
    else if(a==4||a==6)
        e=4;
    else
        e=5;
    if(e==n)
        return 1;
    else
        return 0;
}
int main()
{
    string str;
    vector<string> x;
    cin>>str;
    int n;
    cin>>n;
    int flag=0,k=0;
    int len=str.length();
    for(int i=0;i<len-5;)
    {
        if(str[i+5]!=',')
        {
            cout<<"error"<<endl;
            return 0;
        }
        else
        {
            k++;
        }
        i+=6;
    }
    if(6*k+5!=len)
    {
        cout<<"error"<<endl;
        return 0;
    }
    int m=0;
    for(int i=0;i<=k;i++)
    {
        int n_flag=0;
        for(int j=4;j>=0;j--)
        {
            if(str[6*i+j]>='0'&&str[6*i+j]<='9')
            {
                n_flag=1;
                if(func(str[6*i+j],n))
                {
                    flag=1;
                    x.push_back(str.substr(6*i,5));
                    m++;
                }
            }
        }
        if(n_flag==0)
        {
            cout<<"error"<<endl;
            return 0;
        }
    }
    if(flag==0)
    {
        cout<<"none"<<endl;
        return 0;
    }
    else
    {
        for(int i=0;i<m-1;i++)
            cout<<x[i]<<",";
        cout<<x[m-1]<<endl;
    }
}

发表于 2019-04-25 14:51:34 回复(0)
num = '0123456789'
d = [[1,9],[2,8],[3,7],[4,6],[5,0]]
def find(x):
    for i in range(len(x)-1,-1,-1):
        if x[i] in num:
            return int(x[i])
    return -1
che = input()
day = input()
day = int(day)-1
if ',' not in che:
    print('error')
else:
    che = che.split(',')
    boo = True
    for i in che:
        boo1 = False
        if len(i)!=5:
            boo = False
            print('error')
            break
        for j in i:
            if j in num:
                boo1 = True
                boo = False
                print('error')
                break
        if boo1:
            break
    if boo:
        o = []
        for i in che:
            if find(i)!=-1 and find(i) in d[day]:
                o.append(i)
        print(' '.join(map(str,o)))

发表于 2019-01-24 13:13:11 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author wylu
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] cars = br.readLine().split(",");

        for (String car : cars) {
            int letter = 0, symbol = 0;
            for (char ch : car.toCharArray()) {
                if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) letter++;
                else if (ch < '0' || ch > '9') symbol++;
            }
            if (symbol > 0 || letter == car.length() || car.length() != 5) {
                System.out.println("error");
                return;
            }
        }

        int n = Integer.parseInt(br.readLine());
        if (n == 6 || n == 7) {
            System.out.println("none");
            return;
        }

        boolean flag = true;
        for (String car : cars) {
            int e = 0;
            for (int i = car.length() - 1; i >= 0; i--) {
                char ch = car.charAt(i);
                if (ch >= '0' && ch <= '9') {
                    e = ch - '0';
                    break;
                }
            }
            if ((e == 1 || e == 9) && n == 1) {
                flag = false;
                System.out.println(car);
            } else if ((e == 2 || e == 8) && n == 2) {
                flag = false;
                System.out.println(car);
            } else if ((e == 3 || e == 7) && n == 3) {
                flag = false;
                System.out.println(car);
            } else if ((e == 4 || e == 6) && n == 4) {
                flag = false;
                System.out.println(car);
            } else if (n == 5) {
                flag = false;
                System.out.println(car);
            }
        }
        if (flag) System.out.println("none");
    }
}

发表于 2019-01-17 22:26:26 回复(0)
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
    static void trafficRestriction(String[] input,int day) {
        Pattern pattern = Pattern.compile(".*\\d+.*");
        /*for (int i = 0; i < input.length; i++) {
            System.out.println(input[i]+input[i].length()+pattern.matcher(input[i]).matches());
        }*/
        String result = "";
        boolean flag = false;
        for (int i = 0; i < input.length; i++) {
            String number = input[i];
            if (number.length() == 5 && pattern.matcher(number).matches()) {//判断车牌长度和是否包含数字
//                System.out.println("number:"+number);
                for (int j = number.length()-1; j >=0; j--) {
//                    System.out.println("number"+j+":"+number.charAt(j));
                    if (number.charAt(j)>=48 && number.charAt(j)<=57) {
                        int theDay = Integer.parseInt(String.valueOf(number.charAt(j)));
//                        System.out.println(theDay);
//                        System.out.println("theDay+day:"+theDay+day);
                        if (theDay == day || theDay+day == 10) {
                            flag = true;
                            result+=number+" ";
                        }else if (theDay == 0 && day == 5) {
                            flag = true;
                            result+=number+" ";
                        }
                        break;
                    }
                }
            }else{
                result = "";
                flag = true;
                System.out.println("error");
                break;
            }
            
        }
        if (result.equals("") && !flag) {
            System.out.println("none");
        }else {
            String[] finalResult= null;
            finalResult = result.trim().split(" ");
            for (int j = 0; j < finalResult.length; j++) {
                System.out.println(finalResult[j]);
            }
        }
        
    }
    public static void main(String[] e){
        Scanner sca = new Scanner(System.in);
        String [] input = null;
        String inputString = null;
        int day = 0;
        while (sca.hasNext()) {
            inputString = sca.nextLine();
            
            day = Integer.valueOf(sca.next());
//            System.out.println(inputString+day);
        }

        if (inputString.contains(",")) {
            input = inputString.split(",");
            trafficRestriction(input,day);
        }else {
            System.out.println("error");
        }
        
        
    }
}


这个输出真的很迷,用print,不能用println

发表于 2019-01-17 10:01:31 回复(0)
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <map>
#include <algorithm>

using namespace std;

map<int,vector<char>> sBannedlist = {
    {1,{'1','9'}},
    {2,{'2','8'}},
    {3,{'3','7'}},
    {4,{'4','6'}}
};

inline bool isValid(const string& num) {
    if(num.size() != 5)
        return false;
    for(const auto& c : num) {
        if(c >= '0' && c <= '9')
            return true;
    }
    return false;
}

inline bool isBanned(const string& num, int day) {
    if(day == 6 || day == 7) {
        return false;
    }
    char last = 0;
    for(auto it = num.crbegin(); it != num.crend(); ++it) {
        if( (*it) >= '0' && (*it) <= '9') {
            last = *it;
            break;
        }
    }
    const auto& vec = sBannedlist[day];
    if(std::find(vec.cbegin(),vec.cend(),last) != vec.cend())
       return true;
    return false;
}

int main() {
    vector<string> vec;
    string input,tmp;
    auto day = 0;
    while(cin>>input) {
        stringstream inputline(input);
        while(getline(inputline, tmp, ',')) {
            vec.push_back(tmp);
        }
        cin>>day;
    }
    for(const auto& num : vec) {
        if(!isValid(num)) {
            cout<<"error"<<endl;
            return 0;
        }
    }
    for(const auto& num : vec) {
       if(!isValid(num)) {
           cout<<"error"<<endl;
       } else {
           if(isBanned(num,day))
               cout<<num<<endl;
       }
    }

    return 0;
}

发表于 2019-01-14 21:10:29 回复(0)

问题信息

上传者:小小
难度:
13条回答 2921浏览

热门推荐

通过挑战的用户

查看代码