华为机试真题练习汇总(71~80)

华为机试:HJ77 火车进站 给定一个正整数N代表火车数量,0 阅读详情

华为机试真题练习汇总(71~80)

题目来源:华为机试 - 牛客

标记 * 号的代表有难度的题目。

HJ71 字符串通配符

描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
?:匹配1个字符

注意:匹配时不区分大小写。

输入:
通配符表达式;
一组字符串。

输出:
返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

代码:

#include <cctype>
#include <iostream>
#include <vector>
using namespace std;

bool judge (char& c) {
    return (isalpha(c) || isalnum(c) || c == '.');
}

bool match(string p, string s) {
    int plen = p.size();
    int slen = s.size();
    // dp[i,j]: p[0,...,i]与s[0,...,j]是否匹配
    vector<vector<bool>> dp(plen + 1, vector<bool>(slen + 1, false));
    // 初始化
    dp[0][0] = true;
    // 状态转移
    for (int i = 1; i <= plen; i++) {
        dp[i][0] = dp[i - 1][0] && (p[i - 1] == '*'); // 首字符为'*'的情况
        for (int j = 1; j <= slen; j++) {
            if (p[i - 1] == '*') {
                dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
            } else {
                if (tolower(p[i - 1]) == tolower(s[j - 1])) // 要么两字符相等
                    dp[i][j] = dp[i - 1][j - 1];
                if (p[i - 1] == '?' && judge(s[j - 1])) // 要么?通配
                    dp[i][j] = dp[i - 1][j - 1];
            }
        }
    }
    return dp[plen][slen];
}

int main() {
    string p, s;
    cin >> p >> s;
    if (match(p, s)) {
        cout << "true" << endl;
    } else {
        cout << "false" << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

HJ72 百钱买百鸡问题

描述
公元五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
现要求你打印出所有花一百元买一百只鸡的方式。

输入描述:
输入任何一个整数,即可运行程序。

输出描述:
输出有数行,每行三个整数,分别代表鸡翁,母鸡,鸡雏的数量

代码:

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    for (int i = 0; i <= 20; i++)
        for (int j = 0; j <= 25; j++)
            for (int k = 0; k <= 100; k++) {
                if (i + j + k == 100 && 5 * i + 3 * j + k / 3.0 == 100.0)
                    cout << i << " " << j << " " << k << endl;
            }
    return 0;
}
// 64 位输出请用 printf("%lld")

HJ73 计算日期到天数转换

描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。

输入描述:
输入一行,每行空格分割,分别是年,月,日

输出描述:
输出是这一年的第几天

代码:

#include <iostream>
#include <vector>
using namespace std;

int isLeapYear(int y) {
    return (y % 400 == 0) || (y % 100 != 0 && y % 4 == 0);
}

int trans(int y, int m, int d) {
    const vector<int> days = {
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };
    int sum = 0;
    for (int i = 0; i < m - 1; i++)
        sum += days[i];
    sum += d;
    if (isLeapYear(y) && m > 2)
        sum++;
    return sum;
}

int main() {
    int year, month, day;
    cin >> year >> month >> day;
    cout << trans(year, month, day) << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

HJ74 参数解析

描述
在命令行输入如下命令:

xcopy /s c:\ d:\e,

各个参数如下:

参数1:命令字xcopy

参数2:字符串/s

参数3:字符串c:\

参数4: 字符串d:\e

请编写一个参数解析程序,实现将命令行各个参数解析出来。

解析规则:

1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将”"去掉,引号不存在嵌套情况。
3.参数不定长

4.输入由用例保证,不会出现不符合要求的输入

输入描述:
输入一行字符串,可以有空格

输出描述:
输出参数个数,分解后的参数,每个参数都独占一行

代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    string input;
    getline(cin, input);

    vector<string> parameters;
    string parameter = "";
    bool flag = false; // 记录是否进入引号内
    for (int i = 0; i < input.length(); i++) {
        if (flag) { // 在引号内
            if (input[i] != '\"')
                parameter.push_back(input[i]);
            else
                flag = false;
        } else { // 不在引号内
            if (input[i] == ' ') {
                // 遇到空格,截断
                parameters.push_back(parameter);
                parameter.clear();
            } else if (input[i] == '\"') {
                // 进入引号,设置flag
                flag = true;
            } else { // 其余添加进字符串
                parameter.push_back(input[i]);
            }
        }
    }
    parameters.push_back(parameter);
    cout << parameters.size() << endl;
    for (string& p : parameters)
        cout << p << endl;
        
    return 0;
}
// 64 位输出请用 printf("%lld")

HJ75 公共子串计算

描述
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。

注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。

输入描述:
输入两个只包含小写字母的字符串

输出描述:
输出一个整数,代表最大公共子串的长度

代码:

#include <iostream>
#include <vector>
using namespace std;

int LCSLength(string& s1, string& s2) {
    int M = s1.length(), N = s2.length();
    vector<vector<int>> dp(M + 1, vector<int>(N + 1, 0));
    int maxLen = 0;
    for (int i = 1; i <= M; i++)
        for (int j = 1; j <= N; j++) {
            if (s1[i - 1] == s2[j - 1])
                dp[i][j] = dp[i - 1][j - 1] + 1;
            else
                dp[i][j] = 0;
            if (dp[i][j] > maxLen)
                maxLen = dp[i][j];
        }
    return maxLen;
}

int main() 
{
    string s1, s2;
    cin >> s1 >> s2;
    cout << LCSLength(s1, s2) << endl;

    return 0;
}
// 64 位输出请用 printf("%lld")

HJ76 尼科彻斯定理

描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

输入描述:
输入一个int整数

输出描述:
输出分解后的string

代码:

#include <iostream>
using namespace std;

int main() {
    int m;
    cin >> m;
    int mid = m * m;
    if (mid % 2 == 1) {
        int begin = mid - m / 2 * 2;
        int end = mid + m / 2 * 2;
        for (int i = begin; i <= end; i += 2) {
            if (i != end)
                cout << i << "+";
            else
                cout << i << endl;
        }
    } else {
        int begin = mid - 1 - (m / 2 - 1) * 2;
        int end = mid + 1 + (m / 2 - 1) * 2;
        for (int i = begin; i <= end; i += 2) {
            if (i != end)
                cout << i << "+";
            else
                cout << i << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

* HJ77 火车进站

描述
给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。
要求输出所有火车出站的方案,以字典序排序输出。

输入描述:
第一行输入一个正整数N(0 < N <= 10),第二行包括N个正整数,范围为1到10。

输出描述:
输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。

代码 1:

#include <functional>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;

int main() 
{
    int n;
    cin >> n;
    vector<int> trains(n);
    for (int i = 0; i < n; i++)
        cin >> trains[i];

    vector<vector<int>> res;
    vector<int> seq;
    stack<int> s;
    // 回溯算法
    function<void(int)> dfs = [&](int index) {
        if (index >= n && s.empty()) {
            res.push_back(seq);
            return;
        }
        // 进栈
        if (index < n) {
            s.push(trains[index]);
            dfs(index + 1);
            // 回溯
            s.pop();
        }
        // 出栈
        if (!s.empty()) {
            seq.push_back(s.top());
            s.pop();
            dfs(index);
            // 回溯
            s.push(seq.back());
            seq.pop_back();
        }
    };

    dfs(0);
    sort(res.begin(), res.end());
    for (vector<int>& v : res) {
        for (int& x : v)
            cout << x << " ";
        cout << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

代码 2:

#include <algorithm>
#include <functional>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> trains(n);
    for (int i = 0; i < n; i++)
        cin >> trains[i];

    const vector<int> original_seq(trains);

    // 全排列前要先排序
    sort(trains.begin(), trains.end());

    auto check = [&](vector<int>& arr) -> bool {
        stack<int> s;
        int idx = 0;
        for (const int& train : original_seq) {
            s.push(train);
            while (!s.empty() && arr[idx] == s.top()) {
                s.pop();
                idx++;
            }
        }
        return s.empty();
    };

    // 全排列
    do {
        if (check(trains)) {
            for (int& x : trains)
                cout << x << " ";
            cout << endl;
        }
    } while (next_permutation(trains.begin(), trains.end()));

    return 0;
}
// 64 位输出请用 printf("%lld")

HJ80 整型数组合并

描述
题目标题:

将两个整型数组按照升序合并,并且过滤掉重复数组元素。
输出时相邻两数之间没有空格。

输入描述:
输入说明,按下列顺序输入:
1 输入第一个数组的个数
2 输入第一个数组的数值
3 输入第二个数组的个数
4 输入第二个数组的数值

输出描述:
输出合并之后的数组

代码:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    vector<int> v;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        v.push_back(x);
    }
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        v.push_back(x);
    }

    sort(v.begin(), v.end());
    // 分组循环
    for (int i = 0; i < v.size(); i++) {
        while (i <= v.size() - 1 && v[i] == v[i + 1])
            i++;
        cout << v[i];
    }
    return 0;
}
// 64 位输出请用 printf("%lld")
2026年华为od机试真题题库 OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷) 阅读详情

相关推荐

2026华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Python实现。

MISAYAONE的博客 29万+

华为机试HJ77:火车进站

C++实现——火车进站

翟天保的博客 1万+

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

华为机试-077-中等-HJ77.火车进站

【代码】华为机试-077-中等-HJ77.火车进站

tttzzzqqq2018的博客 548

2026华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C++实现。

MISAYAONE的博客 20万+

2026华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,JavaScript实现。

MISAYAONE的博客 8万+

【华为机试】HJ77 火车进站

给定一个正整数N代表火车数量,0

weixin_54373650的博客 445

2026华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C语言实现。

MISAYAONE的博客 11万+

HJ77 火车进站

描述 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。 要求输出所有火车出站的方案,以字典序排序输出。 输入描述: 有多组测试用例,每一组第一行输入一个正整数N(0 输出描述: 输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。 示例1: 输入: 3 1 2 3 输出: 1 2 3 1 3 2 2

柔水终成雕刀 836

【2025华为OD机考真题】- 螺旋数字矩阵(B卷-100分)(C版)

🔔本文收录于「最新最全华为OD机试真题(C版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅

**My Coding Family** 994

华为OD 技术综合面,手撕代码真题整理(71):回文字符串 | 移除数组中的元素

OD,全名 Outsourcing Dispacth,中文外包派遣。华为 19 年开始探索并实行新的研发“人力外包”模式,按正式员工标准进行招聘(话虽如此,实际要求没那么高),由业务部门负责培养和管理,解决更为核心的业务问题,对于绩效优秀且能力突出的人才提供转正式员工通道。人力外包签约方为德科/科锐国际,劳动合同期为 4 年,试用期 6 个月。员工关系、五险一金、考勤发薪由德科/科锐国际负责;定级定薪、员工培训、工作安排、绩效评比和晋升等由华为负责。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 277

华为OD机试真题及题解(JAVA)

本系列参考给出的题库,写出自己的题解,未上机实践过,无法保证100%通过。但实现思路上会有更加详细的说明。如果读者发现了某个题解的bug,欢迎在评论区留言讨论,并给出测试用例。

yangqin@1225的博客 2647

华为OD 技术综合面,手撕代码真题整理(84):最小生成树的权值之和 | 排列组合的个数

OD,全名 Outsourcing Dispacth,中文外包派遣。华为 19 年开始探索并实行新的研发“人力外包”模式,按正式员工标准进行招聘(话虽如此,实际要求没那么高),由业务部门负责培养和管理,解决更为核心的业务问题,对于绩效优秀且能力突出的人才提供转正式员工通道。人力外包签约方为德科/科锐国际,劳动合同期为 4 年,试用期 6 个月。员工关系、五险一金、考勤发薪由德科/科锐国际负责;定级定薪、员工培训、工作安排、绩效评比和晋升等由华为负责。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 221

「解析」牛客网-华为机考企业真题61-80

又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证idear,避免重复造轮子的繁琐,希望对看合集的你有些许帮助!

绿色羽毛 2124

软通动力外派华为面试题

软通动力外派华为面试题

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

搭建jump server管理公司服务器

给大家送一个小福利附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!试跳槽、自身职业规划迷茫的朋友们。[外链图片转存中…(img-jYOXmkOq-1712930666624)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2301_82242670的博客 1145

5分钟搞定!用L型匹配电路优化窄带天线性能(附Smith圆图实操)

本文针对窄带天线阻抗匹配难题,提供了一套5分钟快速解决方案。通过详解L型匹配电路的核心原理,并结合Smith圆图这一射频工程师的“瑞士军刀”,手把手指导如何选择拓扑、计算元件值并进行实际调试,旨在帮助硬件工程师高效优化天线性能,实现最大功率传输。

yyy34的博客 446

使用Nginx作为APT仓库的缓存(3),2024-2024蚂蚁金服Linux运维面试真题解析

【代码】使用Nginx作为APT仓库的缓存(3),2024-2024蚂蚁金服Linux运维面试真题解析。

2401_84140060的博客 191

MTGS与3D高斯泼溅:如何用多轨迹数据重建自动驾驶场景(附代码解析)

本文深入解析了MTGS(多轨迹高斯泼溅)技术在自动驾驶场景重建中的工程实践。该方法通过分层场景表示,巧妙融合多轨迹数据,利用3D高斯泼溅技术统一处理静态几何与动态物体,有效解决了复杂环境下的重建难题。文章结合代码,详细阐述了其实现框架、损失函数设计及优化策略,为构建高保真数字孪生场景提供了实用指南。

v5w6x的博客 447

谷歌浏览器崩溃排查:闪退、卡死、网页打不开的修复指南

浏览器多进程架构通过进程隔离、GPU加速和扩展沙箱提升网页渲染效率,但配置损坏、扩展冲突、显卡驱动异常或系统资源不足时,常会以闪退、卡死、白屏、内存占用飙升和能上微信却打不开网页等形式暴露。排查价值在于先分层定位系统、进程、配置扩展与网页内容,再用无痕模式、chrome://crashes、chrome://gpu和浏览器任务管理器收集证据,避免盲目重装。对办公、开发运维和日常维护场景,禁用扩展、关闭硬件加速、刷新DNS缓存、重置配置文件乃至干净重装,都是可复用的工程化处置手段。围绕谷歌浏览器崩溃的典型症状

weixin_34138056的博客 426

不同设备使用同一个Git账号(1),阿里+头条+腾讯大厂网络安全笔试真题

git config --global user.name “用户名”git config --global user.email “邮箱”ssh-keygen -t rsa -C “邮箱”

m0_60707708的博客 220

手把手教你设计2bit反射型超表面:从单patch扫参到pin管配置全流程

本文提供了一份2bit反射型超表面设计的完整工程实践指南。从单贴片谐振器的参数化扫描与“270度法则”应用,到PIN二极管等效电路模型的获取与集成,再到利用参数化扫描高效仿真四种工作状态,手把手指导读者完成从单元设计到阵列布局、偏置线集成及加工考量的全流程,旨在帮助射频工程师将概念转化为可加工测试的实体模型。

java5的博客 1023
上一篇: 华为机试真题练习汇总(61~70)
下一篇: 音视频基础知识
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值