✨ 笔试合集传送们 -> 🧷学长刷题笔记       🍒 本专栏已收集 140+ 套笔试题,笔试真题 会在第一时间跟新    🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。    🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞             🌈 团子收官秋招最后一场笔试,来啦!!!    🧸 本次前两题难度不大,最后一题是一道二分图最大权匹配模版题,对于刚接触的宝子们会比较困难    1️⃣ 字符串模拟,比较简单    2️⃣ 自定义排序+字符串处理,难度不到    3️⃣ 二分图最大权匹配模版题,有一定的难度      🧋 01.珍珠奶茶的秘密配方 评测链接🔗   问题描述   K小姐是一家珍珠奶茶店的老板。她有一个秘密配方列表,列表中包含  种配料。每种配料都有一个独特的编号。K小姐认为一种配料是"完美配料",需要满足以下两个条件:       该配料编号的所有数位之和是一个偶数。    该配料编号中至少包含一个奇数数字。      现在,K小姐想知道她的秘密配方列表中有多少种"完美配料"。你能帮她计算一下吗?   输入格式   第一行输入一个整数 (),表示秘密配方列表中配料的数量。   第二行输入  个整数 (),表示每种配料的编号。   输出格式   输出一个整数,表示秘密配方列表中"完美配料"的数量。   样例输入1   313 14 15   样例输出1   2   样例输入2   511 22 33 44 55   样例输出2   3   样例解释                  样例 解释说明                        样例1      13和15是"完美配料"。13的数位和为1+3=4(偶数),且包含奇数;15的数位和为1+5=6(偶数),且包含奇数。14不是"完美配料",因为它不包含奇数。                样例2      11、33和55是"完美配料"。它们的数位和都是偶数(2、6和10),且都包含奇数。22和44不是"完美配料",因为它们不包含奇数。               数据范围                 题解       模拟+枚举      对于每个输入的数字,需要做两件事:       计算数位之和    检查是否包含奇数数字      可以通过以下步骤来检查每个数字:       使用循环,每次取出数字的最后一位(对10取余)    将这一位加到数位之和中    检查这一位是否为奇数    将原数字除以10,继续处理下一位      在循环结束后,检查:       数位之和是否为偶数    是否找到了至少一个奇数数字           如果同时满足这两个条件,将计数器加1     最后,输出计数器的值,即为"完美配料"的数量      参考代码       Python      # 读取输入n = int(input())  # 读取配料数量ingredients = list(map(int, input().split()))  # 读取每种配料的编号def is_perfect(num):    digit_sum = 0  # 初始化数位和    has_odd = False  # 标记是否包含奇数        while num > 0:        digit = num % 10  # 获取最后一位数字        digit_sum += digit  # 累加到数位和        if digit % 2 == 1:  # 检查是否为奇数            has_odd = True        num //= 10  # 去掉最后一位        # 返回是否为完美配料(数位和为偶数且包含奇数)    return digit_sum % 2 == 0 and has_odd# 计算完美配料的数量perfect_count = sum(1 for ingredient in ingredients if is_perfect(ingredient))# 输出结果print(perfect_count)       Java      import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();  // 读取配料数量        int perfectCount = 0;  // 初始化完美配料计数器        for (int i = 0; i < n; i++) {            int ingredient = scanner.nextInt();  // 读取每种配料的编号            if (isPerfect(ingredient)) {                perfectCount++;  // 如果是完美配料,计数器加1            }        }        System.out.println(perfectCount);  // 输出结果    }    // 判断是否为完美配料    private static boolean isPerfect(int num) {        int digitSum = 0;  // 初始化数位和        boolean hasOdd = false;  // 标记是否包含奇数        while (num > 0) {            int digit = num % 10;  // 获取最后一位数字            digitSum += digit;  // 累加到数位和            if (digit % 2 == 1) {  // 检查是否为奇数                hasOdd = true;            }            num /= 10;  // 去掉最后一位        }        // 返回是否为完美配料(数位和为偶数且包含奇数)        return digitSum % 2 == 0 && hasOdd;    }}       Cpp      #include <iostream>#include <vector>using namespace std;// 判断是否为完美配料bool isPerfect(int num) {    int digitSum = 0;  // 初始化数位和    bool hasOdd = false;  // 标记是否包含奇数        while (num > 0) {        int digit = num % 10;  // 获取最后一位数字        digitSum += digit;  // 累加到数位和        if (digit % 2 == 1) {  // 检查是否为奇数            hasOdd = true;        }        num /= 10;  // 去掉最后一位    }        // 返回是否为完美配料(数位和为偶数且包含奇数)    return (digitSum % 2 == 0) && hasOdd;}int main() {    int n;    cin >> n;  // 读取配料数量        int perfectCount = 0;  // 初始化完美配料计数器    for (int i = 0; i < n; i++) {        int ingredient;        cin >> ingredient;  // 读取每种配料的编号        if (isPerfect(ingredient)) {            perfectCount++;  // 如果是完美配料,计数器加1        }    }        cout << perfectCount << endl;  // 输出结果    return 0;}   🎀 02.神秘密码解锁器 评测链接🔗   问题描述   LYA 是一名热爱解谜的高中生。最近,她收到了一个神秘的密码锁,上面刻着一串由小写字母和数字组成的混合字符串。解锁的关键是找出这串字符中隐藏的第  大数字。LYA 决定编写一个程序来解开这个密码锁。解锁规则如下:       混合字符串中的连续数字会被视为一个完整的非负整数。    将所有提取出的非负整数按照降序排列。    从排序后的数列中选择第  个数作为密码。    如果不存在第  个数,则密码锁无法打开。      你能帮助 LYA 编写一个程序,快速找出密码或确定密码锁无法打开吗?   输入格式   第一行输入一个正整数 (),表示需要找的是第  大的数。   第二行输入一个长度不超过  的字符串 ,由小写字母和数字混合构成。   输出格式   输出一行,如果存在第  大的数,则输出这个数(不包含前导 0);如果不存在,则输出字母 N。   样例输入1   3a12b03c3d0   样例输出1   3   样例输入2   5a12b03c3d0   样例输出2   N   样例解释                  样例 解释说明                        样例1      从字符串中提取出的非负整数按降序排列为:[12, 3, 3, 0],第 3 个数为 3。                样例2      从字符串中提取出的非负整数按降序排列为:[12, 3, 3, 0],不存在第 5 个数。               数据范围           字符串  的长度不超过      仅由小写英文字母和数字组成      题解       模拟+自定义排序    由于整数可能很大,本题需要用字符串模拟。      这道题目要求从一个混合字符串中提取数字,并找出第 k 大的数。解题思路如下:       遍历字符串,提取所有连续的数字序列。    将提取出的数字序列转换为整数,并存储在一个数组中。    对数组进行降序排序,序时使用自定义比较函数,先比较数字的位数,再比较数字的大小,这样可以正确处理大数的情况。。    如果数组长度小于 k,输出 "N";否则,输出第 k 个元素。      参考代码       Python      # 读取输入k = int(input())s = input()# 提取数字numbers = []current_number = ''for char in s:    if char.isdigit():        current_number += char    elif current_number:        # 去除前导零        numbers.append(current_number.lstrip('0') or '0')        current_number = ''# 处理最后可能剩余的数字if current_number:    numbers.append(current_number.lstrip('0') or '0')# 排序numbers.sort(key=lambda x: (len(x), x), reverse=True)# 输出结果if k <= len(numbers):    print(numbers[k-1])else:    print('N')       Java      import java.util.*;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int k = scanner.nextInt();        String s = scanner.next();        List<String> numbers = new ArrayList<>();        StringBuilder currentNumber = new StringBuilder();        for (char c : s.toCharArray()) {            if (Character.isDigit(c)) {                currentNumber.append(c);            } else if (currentNumber.length() > 0) {                String number = removeLeadingZeros(currentNumber.toString());                numbers.add(number);                currentNumber = new StringBuilder();            }        }        if (currentNumber.length() > 0) {            String number = removeLeadingZeros(currentNumber.toString());            numbers.add(number);        }        numbers.sort((a, b) -> {            if (a.length() != b.length()) {                return b.length() - a.length();            }            return b.compareTo(a);        });        if (k <= numbers.size()) {            System.out.println(numbers.get(k - 1));        } else {            System.out.println("N");        }    }    private static String removeLeadingZeros(String s) {        int i = 0;        while (i < s.length() - 1 && s.charAt(i) == '0') {            i++;        }        return s.substring(i);    }}       Cpp      #include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;int main() {    int k;    string s;    cin >> k >> s;    vector<string> nums;    string curr = "";    // 提取数字    for (char c : s) {        if (isdigit(c)) {            curr += c;        } else if (!curr.empty()) {            // 去除前导零            int idx = curr.find_first_not_of('0');            nums.push_back(idx != string::npos ? curr.substr(idx) : "0");            curr.clear();        }    }    // 处理最后可能剩余的数字    if (!curr.empty()) {        int idx = curr.find_first_not_of('0');        nums.push_back(idx != string::npos ? curr                                   
点赞 1
评论 0
全部评论

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务