首页 > 试题广场 >

订单分类

[编程题]订单分类
  • 热度指数:179 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

小美在美团工作,负责对订单进行分类。每个订单都有一个唯一的标识符(ID),ID由字母和数字组成。你需要根据订单的ID来判断它属于哪一类。
分类规则如下:

  1. 如果ID以字母开头,并且后面只包含数字,则属于“electronics”。
  2. 如果ID以数字开头,并且后面只包含字母,则属于“clothing”。
  3. 如果ID以字母开头,并且后面只包含字母和数字,则属于“accessories”。
  4. 如果ID以数字开头,并且后面只包含特殊字符(非字母和数字),则属于“invalid”。
  5. 其他情况的ID都属于“miscellaneous”。

请你帮助小完成任务,输入订单ID,输出对应的哪一类。


输入描述:
第一行包含一个整数,表示有n个订单。
接下来的n行,每行是一个订单的ID。


输出描述:
对于每个订单的ID,输出其所属的类别。
示例1

输入

5
E123
456CLOTH
A1B2C3
1$%^
A!23

输出

electronics
miscellaneous
accessories
invalid
miscellaneous
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            in.nextLine(); // 消耗掉整数后的换行符

            // 处理n个订单ID
            for (int i = 0; i < n; i++) {
                String id = in.nextLine();
                System.out.println(classify(id));
            }

        }
    }

    private static String classify(String id) {
        if (id.isEmpty()) {
            return "miscellaneous";
        }

        char first = id.charAt(0);
        String rest = id.substring(1);

        // 规则1:以字母开头,后面只包含数字
        if (Character.isLetter(first)) {
            boolean allDigits = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isDigit(c)) {
                    allDigits = false;
                    break;
                }
            }
            if (allDigits) {
                return "electronics";
            }
        }

        // 规则2:以数字开头,后面只包含字母
        if (Character.isDigit(first)) {
            boolean allLetters = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isLetter(c)) {
                    allLetters = false;
                    break;
                }
            }
            if (allLetters) {
                return "clothing";
            }
        }

        // 规则3:以字母开头,后面只包含字母和数字
        if (Character.isLetter(first)) {
            boolean allLetterOrDigit = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isLetterOrDigit(c)) {
                    allLetterOrDigit = false;
                    break;
                }
            }
            if (allLetterOrDigit) {
                return "accessories";
            }
        }

        // 规则4:以数字开头,后面只包含特殊字符(非字母和数字)
        if (Character.isDigit(first)) {
            boolean allSpecial = true;
            for (char c : rest.toCharArray()) {
                if (Character.isLetterOrDigit(c)) {
                    allSpecial = false;
                    break;
                }
            }
            if (allSpecial) {
                return "invalid";
            }
        }

        // 其他情况
        return "miscellaneous";
    }
}
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            in.nextLine(); // 消耗掉整数后的换行符

            // 处理n个订单ID
            for (int i = 0; i < n; i++) {
                String id = in.nextLine();
                System.out.println(classify(id));
            }

        }
    }


    private static String classify(String id) {
        if (id.isEmpty()) {
            return "miscellaneous";
        }

        char first = id.charAt(0);
        String rest = id.substring(1);

        // 规则1:以字母开头,后面只包含数字
        if (Character.isLetter(first)) {
            boolean allDigits = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isDigit(c)) {
                    allDigits = false;
                    break;
                }
            }
            if (allDigits) {
                return "electronics";
            }
        }

        // 规则2:以数字开头,后面只包含字母
        if (Character.isDigit(first)) {
            boolean allLetters = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isLetter(c)) {
                    allLetters = false;
                    break;
                }
            }
            if (allLetters) {
                return "clothing";
            }
        }

        // 规则3:以字母开头,后面只包含字母和数字
        if (Character.isLetter(first)) {
            boolean allLetterOrDigit = true;
            for (char c : rest.toCharArray()) {
                if (!Character.isLetterOrDigit(c)) {
                    allLetterOrDigit = false;
                    break;
                }
            }
            if (allLetterOrDigit) {
                return "accessories";
            }
        }

        // 规则4:以数字开头,后面只包含特殊字符(非字母和数字)
        if (Character.isDigit(first)) {
            boolean allSpecial = true;
            for (char c : rest.toCharArray()) {
                if (Character.isLetterOrDigit(c)) {
                    allSpecial = false;
                    break;
                }
            }
            if (allSpecial) {
                return "invalid";
            }
        }

        // 其他情况
        return "miscellaneous";
    }
}


发表于 2025-07-21 11:39:39 回复(0)
测试输入了六个值,返回应该是六个值,但是只有5个返回值,题目是不是有问题
发表于 2025-07-07 10:40:39 回复(0)