【秋招笔试】10.08华为荣耀秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

✨ 本系列打算持续跟新 春秋招笔试题

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新

🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞

alt

🌈 HONOR荣耀秋招笔试,来啦!!!

🍥 本次难度不大,实际考试的时候T2有点谜语,第三题难度中等偏上,需要熟练的DP底子

1️⃣ 模拟+排序题,主要考查语法

2️⃣ 简单的完全背包问题,不难,只是原题面比较谜语

3️⃣ 前缀和+动态规划+思维,对于一步到位比较困难的题目,我们拆成两步分别做。

🔐01.密码解锁 评测链接🔗

问题描述

LYA 是一家科技公司的安全专家。最近,她接到了一项特殊任务:破解一个神秘的密码锁。这个密码锁的特点是,它的密码由一串包含英文字母、数字和特殊符号的字符串组成。然而,真正的密码只包含其中的数字部分,而且需要按照从小到大的顺序排列。LYA 需要编写一个程序来提取这些数字并正确排序,以便快速破解密码。

输入格式

输入为一行字符串,包含英文字母、数字以及特殊符号等 ASCII 范围内字符。

输出格式

输出一行字符串,包含输入字符串中的所有数字字符,并按数字大小从小到大排序。重复的数字不合并。

样例输入1

3d50J,Aa3

样例输出1

0335

样例输入2

H@ck3r_101

样例输出2

0113

数据范围

  • 输入字符串长度:
  • 字符串中的字符均为 ASCII 码可表示的字符

样例解释

样例 解释说明
样例1 输入字符串中包含数字 3、5、0、3,按从小到大排序后输出 0335
样例2 输入字符串中包含数字 3、1、0、1,按从小到大排序后输出 0113

题解

模拟+排序

主要步骤如下:

  1. 遍历字符串,提取数字字符:

    • 可以使用一个循环遍历输入的字符串。对于每个字符,检查它是否是数字(可以使用内置的 isdigit() 方法)。如果是数字,就将它保存下来。
  2. 将提取的数字转换为整数并排序

  3. 将排序后的数字转回字符串并输出

    • 排序完成后,需要将这些数字重新转换为字符串。这里要注意,需要保持每个数字的原始形式,不要合并重复的数字。

参考代码

  • Python
def extract_and_sort_numbers(s):
    # 提取所有数字字符
    nums = [int(c) for c in s if c.isdigit()]
    # 排序数字
    nums.sort()
    # 转换回字符串并连接
    return ''.join(map(str, nums))

# 读取输入
input_str = input().strip()
# 处理并输出结果
print(extract_and_sort_numbers(input_str))
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        System.out.println(extractAndSortNumbers(input));
    }

    public static String extractAndSortNumbers(String s) {
        // 提取数字
        List<Integer> nums = new ArrayList<>();
        for (char c : s.toCharArray()) {
            if (Character.isDigit(c)) {
                nums.add(c - '0');
            }
        }
        // 排序
        Collections.sort(nums);
        // 构建结果字符串
        StringBuilder result = new StringBuilder();
        for (int num : nums) {
            result.append(num);
        }
        return result.toString();
    }
}
  • Cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string extractAndSortNumbers(const string& s) {
    // 提取数字
    vector<int> nums;
    for (char c : s) {
        if (isdigit(c)) {
            nums.push_back(c - '0');
        }
    }
    // 排序
    sort(nums.begin(), nums.end());
    // 构建结果字符串
    string result;
    for (int num : nums) {
        result += to_string(num);
    }
    return result;
}

int main() {
    string input;
    getline(cin, input);
    cout << extractAndSortNumbers(input) << endl;
    return 0;
}

🍰 02.K小姐的蛋糕店订单处理 评测链接🔗

问题描述

K小姐经营着一家蛋糕店,最近接到了多个大型派对的订单。每个订单都需要制作一定数量的小蛋糕,并且需要一定数量的烤箱同时工作才能在规定时间内完成。K小姐想知道,在现有的烤箱数量下,她最多能同时制作多少个小蛋糕。

K小姐手头有以下订单:

  1. 300个小蛋糕,需要20个烤箱
  2. 500个小蛋糕,需要30个烤箱
  3. 620个小蛋糕,需要50个烤箱
  4. 370个小蛋糕,需要30个烤箱
  5. 400个小蛋糕,需要50个烤箱
  6. 450个小蛋糕,需要30个烤箱
  7. 380个小蛋糕,需要40个烤箱
  8. 150个小蛋糕,需要10个烤箱

K小姐希望在不超过现有烤箱数量的情况下,最大化同时制作的小蛋糕数量。每个订单要么完全接受,要么完全拒绝,不能部分完成。

输入格式

输入一个整数 ,表示K小姐蛋糕店现有的烤箱数量。

输出格式

输出一个整数,表示在不超过现有烤箱数量的情况下,K小姐最多能同时制作的小蛋糕数量。

样例输入1

10

样例输出1

150

样例解释

样例 解释说明
样例1 当烤箱数量为10时,K小姐只能接受最后一个订单(150个小蛋糕,需要10个烤箱),因此最多能同时制作150个小蛋糕。

数据范围

题解

动态规划之完全背包

宝子们可能会好奇,为啥这题目要求和条件这么怪。

我只能说根据真实事件(s卷)改编,原题面评价为:猜谜语

这道题目本质上是一个完全背包问题。每个订单可以看作是一个"物品",订单所需的烤箱数量是"重量",订单中的小蛋糕数量是"价值"。目标是在不超过总烤箱数量(背包容量)的情况下,最大化小蛋糕的数量(总价值)。

解题步骤如下:

  1. 定义一个一维数组 ,其中 表示使用 个烤箱时能制作的最大小蛋糕数量。

  2. 初始化 数组,所有元素初始值为0。

  3. 遍历每个订单,对于每个订单:

    • 从前向后遍历 数组(从 订单到 所需烤箱数)
    • 对于每个 ,更新
  4. 最终, 就是答案。

这个解法的时间复杂度是 ,其中 是订单数量, 是烤箱数量。在给定的数据范围内(),这个复杂度是可以接受的。

参考代码

  • Python
# 定义订单列表,每个元素为 [小蛋糕数量, 所需烤箱数]
orders = [
    [300, 20], [500, 30], [620, 50], [370, 30], [400, 50],
    [450, 30], [380, 40], [150, 10]
]

# 读取输入的烤箱数量
x = int(input())

# 初始化dp数组
dp = [0] * (x + 1)

# 遍历每个订单
for cakes, ovens in orders:
    # 从后向前遍历,避免重复选择订单
    for j in range(ovens, x + 1):
        # 更新dp值
        dp[j] = max(dp[j], dp[j - ovens] + cakes)

# 输出结果
print(dp[x])
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 定义订单列表
        int[][] orders = {
            {300, 20}, {500, 30}, {620, 50}, {370, 30}, {400, 50},
            {450, 30}, {380, 40}, {150, 10}
        };
        
        // 读取输入的烤箱数量
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        
        // 初始化dp数组
        int[] dp = new int[x + 1];
        
        // 遍历每个订单
        for (int[] order : orders) {
            int cakes = order[0];
            int ovens = order[1];
            // 从后向前遍历,避免重复选择订单
            for (int j = ovens; j <= x; j ++) {
                // 更新dp值
                dp[j] = Math.max(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网春秋招笔试题汇总 文章被收录于专栏

这里收集了超全的互联网春秋招笔试题,欢迎大家的订阅,会持续跟新的

全部评论

相关推荐

点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务