美团笔试 美团笔试题 0817
笔试时间:2024年08月17日 秋招 开发
历史笔试传送门:2023秋招笔试合集
第一题
参考题解
这个正则表达式用于匹配国际电话号码,其中号码部分可以包含数字和井号。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <vector> #include <regex> using namespace std; // 检查是否为有效的电子邮件地址 bool isEmail(const string &str) { regex pattern("^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\\.com$"); return regex_match(str, pattern); } // 检查是否为有效的IP地址 bool isIP(const string &str) { regex pattern("^(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$"); return regex_match(str, pattern); } // 检查是否为有效的电话号码 bool isPhone(const string &str) { regex pattern("^\\+\\d+-\\d+-[\\d#]+$"); return regex_match(str, pattern); } int main() { int n; cin >> n; cin.ignore(); // 忽略整数后的换行符 vector<string> results; while (n-- > 0) { string input; getline(cin, input); if (isEmail(input)) { results.push_back("email"); } else if (isIP(input)) { results.push_back("ip"); } else if (isPhone(input)) { results.push_back("phone"); } else { results.push_back("invalid"); } } for (const auto &result : results) { cout << result << endl; } return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner; import java.util.ArrayList; import java.util.regex.Pattern; import java.util.regex.Matcher; public class StringClassifier { // 检查是否为有效的电子邮件地址 public static boolean isEmail(String str) { Pattern pattern = Pattern.compile("^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\\.com$"); Matcher matcher = pattern.matcher(str); return matcher.matches(); } // 检查是否为有效的IP地址 public static boolean isIP(String str) { Pattern pattern = Pattern.compile("^(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$"); Matcher matcher = pattern.matcher(str); return matcher.matches(); } // 检查是否为有效的电话号码 public static boolean isPhone(String str) { Pattern pattern = Pattern.compile("^\\+\\d+-\\d+-[\\d#]+$"); Matcher matcher = pattern.matcher(str); return matcher.matches(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 读取输入的组数 scanner.nextLine(); // 忽略整数后的换行符 ArrayList<String> results = new ArrayList<>(); while (n-- > 0) { String input = scanner.nextLine(); if (isEmail(input)) { results.add("email"); } else if (isIP(input)) { results.add("ip"); } else if (isPhone(input)) { results.add("phone"); } else { results.add("invalid"); } } for (String result : results) { System.out.println(result); } scanner.close(); } }
Python:[此代码未进行大量数据的测试,仅供参考]
import re # 检查是否为有效的电子邮件地址 def is_email(string): pattern = re.compile(r"^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.com$") return pattern.match(string) is not None # 检查是否为有效的IP地址 def is_ip(string): pattern = re.compile(r"^(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$") return pattern.match(string) is not None # 检查是否为有效的电话号码 def is_phone(string): pattern = re.compile(r"^\+\d+-\d+-[\d#]+$") return pattern.match(string) is not None def main(): n = int(input()) # 读取输入的组数 results = [] for _ in range(n): input_string = input().strip() if is_email(input_string): results.append("email") elif is_ip(input_string): results.append("ip") elif is_phone(input_string): results.append("phone") else: results.append("invalid") for result in results: print(result) if __name__ == "__main__": main()
第二题
题目
小美对 gcd (最大公约数) 很感兴趣,她会询问你t次。 每次询问给出一个大于1的正整数n,你是否找到一个数字 m (2 ≤ m ≤ n),使得 gcd(n,m)为素数。
输入描述
每个测试文件均包含多组测试数据。
第一行输入一个整数 T (1 ≤ T ≤
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。