华为OD机试 - 密室逃生游戏(Python/JS/C/C++ 2024 E卷 100分)

news2024/10/3 22:11:46

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小强在参加《密室逃生》游戏,当前关卡要找到符合给定密-码 K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为 1~N。

每个箱子中都有一个字符串,字符串由大写字母、小写字母、数字、标点符号、空格组成,需要在这些字符串中找到所有的字母,忽略大小写后排列出对应的密-码,并返回匹配密-码的箱子序号。

提示:满足条件的箱子不超过 1 个。

二、输入描述

第一行为 key 的字符串,
第二行为箱子 boxes,为数组样式,以空格分隔

  • 箱子 N 数量满足 1 ≤ N ≤ 10000,
  • ≤ K.length ≤ 50,
  • 密-码仅包含小写字母的升序字符串,且不会有重复字母,
  • 密-码 K 长度 1 ≤ K.length ≤ 26。

三、输出描述

返回匹配的箱子编号

如果不存在包含要求的密-码的箱子,则返回 -1。

四、测试用例

测试用例1:

1、输入

abc
s,sdf134 A2c4b

2、输出

2

3、说明

第 2 个箱子中的 Abc,符合密-码 abc。

测试用例2:

1、输入

xyz
Hello World XYZ123

2、输出

3

3、说明

第3个箱子中的 XYZ123 提取字母后为 x, y, z,排序后为 xyz,与密-码匹配。

五、解题思路

  1. 输入读取:
    • 使用 Scanner 读取第一行作为密-码 K。
    • 读取第二行并将其按空格分隔,得到所有的箱子字符串。
  2. 处理每个箱子:
    • 对于每个箱子字符串,遍历其中的每个字符。
    • 过滤出字母字符,忽略大小写,将其转换为小写。
    • 使用 TreeSet 来存储这些字母,以去重并自动排序。
  3. 比较与输出:
    • 将 TreeSet 中的字母拼接成字符串。
    • 与密-码 K 进行比较。
    • 如果匹配,则记录当前箱子的编号并输出。
    • 如果遍历所有箱子后仍未找到匹配的箱子,则输出 -1。

六、Python算法源码

# Python版本

# 导入必要的模块
import sys

def main():
    # 读取密-码 K,去除首尾空白字符
    K = sys.stdin.readline().strip()
    
    # 读取所有箱子字符串,按空格分隔
    boxes_line = sys.stdin.readline().strip()
    boxes = boxes_line.split()
    
    # 遍历每个箱子
    for i in range(len(boxes)):
        box = boxes[i]
        letters_set = set()
        
        # 提取字母并转换为小写,存入集合去重
        for c in box:
            if c.isalpha():
                letters_set.add(c.lower())
        
        # 将集合中的字母排序并拼接成字符串
        sorted_letters = ''.join(sorted(letters_set))
        
        # 比较与密-码 K
        if sorted_letters == K:
            # 输出箱子编号(1-based)
            print(i + 1)
            return
    
    # 如果没有匹配的箱子,输出 -1
    print(-1)

# 调用主函数
if __name__ == "__main__":
    main()

七、JavaScript算法源码

// JavaScript版本

// 引入读取输入的模块
const readline = require('readline');

// 创建接口实例
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 存储输入的行
const input = [];

// 读取每一行输入
rl.on('line', (line) => {
    input.push(line.trim());
    // 当输入行数达到2行时,开始处理
    if (input.length === 2) {
        rl.close();
    }
}).on('close', () => {
    // 第一行是密-码 K
    const K = input[0];
    
    // 第二行是箱子字符串,按空格分隔
    const boxes = input[1].split(' ');
    
    // 遍历每个箱子
    for (let i = 0; i < boxes.length; i++) {
        const box = boxes[i];
        const lettersSet = new Set();
        
        // 提取字母并转换为小写,存入Set去重
        for (let c of box) {
            if (/[a-zA-Z]/.test(c)) {
                lettersSet.add(c.toLowerCase());
            }
        }
        
        // 将Set中的字母排序并拼接成字符串
        const sortedLetters = Array.from(lettersSet).sort().join('');
        
        // 比较与密-码 K
        if (sortedLetters === K) {
            // 输出箱子编号(1-based)
            console.log(i + 1);
            process.exit(0);
        }
    }
    
    // 如果没有匹配的箱子,输出 -1
    console.log(-1);
});

八、C算法源码

// C语言版本

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

// 定义最大箱子数量和字符串长度
#define MAX_BOXES 10000
#define MAX_STR_LEN 1001

int main() {
    char K[51]; // 密-码 K,最大长度50
    char boxes_line[MAX_BOXES * MAX_STR_LEN]; // 存储所有箱子字符串
    char *boxes[MAX_BOXES]; // 存储每个箱子的指针
    int box_count = 0;
    
    // 读取密-码 K
    if (scanf("%50s", K) != 1) {
        // 输入错误,退出
        printf("-1\n");
        return 0;
    }
    
    // 读取剩余行作为箱子字符串
    // 使用 getchar() 读取换行符后的内容
    getchar(); // 读取换行符
    if (fgets(boxes_line, sizeof(boxes_line), stdin) == NULL) {
        // 输入错误,退出
        printf("-1\n");
        return 0;
    }
    
    // 分割箱子字符串,按空格分隔
    char *token = strtok(boxes_line, " \n");
    while (token != NULL && box_count < MAX_BOXES) {
        boxes[box_count++] = token;
        token = strtok(NULL, " \n");
    }
    
    // 遍历每个箱子
    for (int i = 0; i < box_count; i++) {
        char letters[27] = {0}; // 存储26个字母
        int letter_present[26] = {0}; // 标记字母是否存在
        int unique_count = 0;
        
        // 提取字母并转换为小写,标记存在的字母
        for (int j = 0; boxes[i][j] != '\0'; j++) {
            if (isalpha(boxes[i][j])) {
                char lc = tolower(boxes[i][j]);
                if (!letter_present[lc - 'a']) {
                    letter_present[lc - 'a'] = 1;
                    letters[unique_count++] = lc;
                }
            }
        }
        
        // 排序字母
        for (int m = 0; m < unique_count - 1; m++) {
            for (int n = m + 1; n < unique_count; n++) {
                if (letters[m] > letters[n]) {
                    char temp = letters[m];
                    letters[m] = letters[n];
                    letters[n] = temp;
                }
            }
        }
        letters[unique_count] = '\0'; // 添加字符串结束符
        
        // 比较与密-码 K
        if (strcmp(letters, K) == 0) {
            // 输出箱子编号(1-based)
            printf("%d\n", i + 1);
            return 0;
        }
    }
    
    // 如果没有匹配的箱子,输出 -1
    printf("-1\n");
    return 0;
}

九、C++算法源码

// C++版本

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false); // 关闭同步,加快输入速度
    cin.tie(0); // 取消 cin 的 tie
    
    string K; // 密-码 K
    cin >> K;
    
    string boxes_line; // 存储所有箱子字符串
    getline(cin, boxes_line); // 读取剩余行
    while(boxes_line.empty()) { // 如果第一次getline读取的是空行,继续读取
        getline(cin, boxes_line);
    }
    
    // 分割箱子字符串,按空格分隔
    vector<string> boxes;
    string box;
    stringstream ss(boxes_line);
    while(ss >> box){
        boxes.push_back(box);
    }
    
    // 遍历每个箱子
    for(int i = 0; i < boxes.size(); i++){
        string box_str = boxes[i];
        set<char> letters_set;
        
        // 提取字母并转换为小写,存入 set 去重并排序
        for(char c : box_str){
            if(isalpha(c)){
                letters_set.insert(tolower(c));
            }
        }
        
        // 构建排序后的字母字符串
        string sorted_letters = "";
        for(auto c : letters_set){
            sorted_letters += c;
        }
        
        // 比较与密-码 K
        if(sorted_letters == K){
            // 输出箱子编号(1-based)
            cout << (i + 1) << "\n";
            return 0;
        }
    }
    
    // 如果没有匹配的箱子,输出 -1
    cout << "-1\n";
    return 0;
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

杀疯啦-yolov11+deepsort的目标跟踪实现

目录 yolov11介绍——实时端到端物体检测 概述 主要特征 支持的任务和模式 性能指标 总结 deepsort介绍&#xff1a; yolov11结合deepsort实现目标跟踪 效果展示 训练与预测 UI设计 其他功能展示 完整代码实现UI界面 yolov11介绍——实时端到端物体检测 概述 YOLO…

IDEA 使用技巧与插件推荐

目录 前言1. IDEA 使用技巧1.1 快捷键优化与应用1.2 高效调试与日志分析1.3 代码模板与片段的自定义 2. 插件推荐2.1 MyBatisX2.2 Lombok2.3 CheckStyle-IDEA2.4 Key Promoter X2.5 GitToolBox2.6 Rainbow Brackets 3. IDEA 性能优化3.1 内存与堆栈设置3.2 禁用不必要的插件3.3…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(中)

3 结果 在图3.1中&#xff0c;我们展示了第2节描述的8个模型的训练曲线。对于这个图表&#xff0c;我们还包括了6个额外的超小型模型&#xff0c;参数数量少至100,000。正如[KMH20]中观察到的&#xff0c;当有效利用训练计算时&#xff0c;语言建模性能遵循幂律。在将这个趋势再…

FreeRTOS篇15:中断管理

一.中断优先级 任何中断的优先级都大于任务&#xff01; 在我们的操作系统&#xff0c;中断同样是具有优先级的&#xff0c;并且我们也可以设置它的优先级&#xff0c;但是他的优先 级并不是从 015 &#xff0c;默认情况下它是从 515 &#xff0c;0~4 这 5 个中断优先级不是 F…

【逐行注释】PF(Particle filter,粒子滤波)的MATLAB代码(附源代码)

文章目录 程序设计1. 介绍2. 系统模型3. 算法步骤 源代码运行结果 程序设计 1. 介绍 粒子滤波是一种用于动态系统状态估计的先进方法&#xff0c;广泛应用于机器人定位、目标跟踪和金融预测等领域。该算法通过一组粒子及其权重来表示系统状态的概率分布&#xff0c;能够有效处…

JavaSE——面向对象8:Object类详解(==与equals的区别、hashCode、toString方法)

目录 一、与equals()的区别 (一)是一个比较运算符 (二)equals是Object类中的方法&#xff0c;只能判断引用类型 (三)equals方法重写练习 1.练习1 2.练习2 3.练习3 二、hashCode方法 三、toString方法 1.默认返回&#xff1a;全类名(包名类名)哈希值的十六进制 (1)不…

VS编译器实用调试技巧

一.什么是bug bug本意是"昆虫"或"虫子&#xff3d;&#xff0c;现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题&#xff0c;简称程序漏洞。“Bug"的创始人格蕾丝&#xff0e;赫柏&#xff08;Grace Murray Hopper)&#xff…

算法笔记(七)——哈希表

文章目录 两数之和判定是否互为字符重排存在重复元素存在重复元素 II字母异位词分组 哈希表&#xff1a;一种存储数据的容器&#xff1b; 可以快速查找某个元素&#xff0c;时间复杂度O(1)&#xff1b; 当频繁查找某一个数时&#xff0c;我们可以使用哈希表 创建一个容器&#…

堆的代码和基础知识

堆的向上和向下调整-CSDN博客 1.堆的基础知识 2.堆的代码 Heap.h #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<stdbool.h> #include<time.h>// typedef int HPDataType; typedef struct Heap {HPDataTy…

电场磁场,能量密度和平均值(定义式是用实数场计算的,不能直接将定义式里面修改为复数场)

能量密度的定义式&#xff0c;都是实数场 平均能量密度&#xff0c;里面的是复数表示的场。具体推导类似坡印廷矢量 、

4.6章节python中空语句pass保留字作用

在Python中&#xff0c;pass 是一个空语句&#xff0c;它什么也不做。它通常用作占位符&#xff0c;在需要语法上需要一个语句但程序逻辑上不需要执行任何操作的地方。 1.占位符&#xff1a;在编写代码时&#xff0c;如果你还没有决定某个部分应该做什么&#xff0c;可以先用 p…

[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪

【算法介绍】 YOLOv11、ByteTrack和PyQt5的组合为实现高效目标追踪提供了一个强大的解决方案。 YOLOv11是YOLO系列的最新版本&#xff0c;它在保持高检测速度的同时&#xff0c;通过改进网络结构、优化损失函数等方式&#xff0c;提高了检测精度&#xff0c;能够同时处理多个…

android RadioButton 设置颜色无效

原因好像是 RadioButton 自动被渲染为 MaterialRadioButton 设置颜色使用这个属性 app:buttonTint“color/black” material-components-android/docs/components/RadioButton.md at master material-components/material-components-android (github.com)https://github.…

【MySQL】SQL介绍+基础+DDL+数据备份+还原

目录 一、DDL建库建表 1. 数据库 2. 内部4特征 3. 外部4特征 4. 数据库结构 5. SQL语句分类&#xff08;重点&#xff09; 6. 注意 7. 数据库表的字段类型 8. 存储引擎 9. 数据库表的操作 二、三范式 1. 什么是范式 2. 约束作用 3. 三范式 4. 第一范式&#xff…

Python从入门到高手4.2节-掌握循环控制语句

目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋&#xff0c;指事物周而复始地运动或变…

Sharp.js:简单而又实用的图像处理库

前言 在现代Web开发中&#xff0c;图像处理是一个不可或缺的部分。 前端开发者经常需要处理图像&#xff0c;以确保它们在不同的设备和分辨率上都能保持良好的显示效果。 sharp.js是一个高性能的Node.js模块&#xff0c;它利用了libvips库&#xff0c;提供了快速且高效的图像…

网安学习(js漏洞挖掘)

内容来自bili白帽大法师白帽大法师的个人空间-白帽大法师个人主页-哔哩哔哩视频 (bilibili.com) 四种方式 目录 1、JS中存在插件名字&#xff0c;根据插件找到相应的漏洞直接利用 2、JS中存在一些URL链接&#xff0c;根据URL链接找到相应的页面进一步测试和利用 3、JS中存…

《软件工程概论》作业一:新冠疫情下软件产品设计

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…

Python案例--水仙花数的探索之旅

一、引言 水仙花数&#xff0c;也称为阿姆斯特朗数&#xff0c;是一种特殊的三位数&#xff0c;其各位数字的立方和等于其本身。例如&#xff0c;153就是一个水仙花数&#xff0c;因为 135333153135333153。这种数字的发现不仅展示了数字的内在美&#xff0c;也激发了人们对数…

STM32编码器接口解析及抗噪声措施探讨

1. 引言 在现代控制系统中&#xff0c;编码器扮演着非常重要的角色。它就像一个精密的测量工具&#xff0c;可以告诉我们机械部件的位置和运动状态。在STM32微控制器中&#xff0c;编码器接口可以轻松地与各种编码器连接&#xff0c;实现精确的控制。我将在这里探讨STM32编码器…