华为机试真题练习汇总(51~60)

什么是华为od,od 薪资待遇,od机试题清单,为什么会去华为 OD?华为od怎么刷题?华为OD已经入职的人的真实感受?(最新华为od机试E卷更新中) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷 阅读详情

华为机试真题练习汇总(51~60)

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

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

HJ51 输出单向链表中倒数第k个结点

描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。

输入描述:
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述:
输出一个整数

代码:

#include <iostream>
using namespace std;

struct ListNode {
    int m_nKey;
    ListNode* m_pNext;

    ListNode(): m_nKey(0), m_pNext(nullptr) {};
    ListNode(int x): m_nKey(x), m_pNext(nullptr) {};
};

ListNode* FindKthToTail(ListNode* head, int k) {
    ListNode* fast = head;
    ListNode* slow = head;
    while (k--) {
        if (fast)
            fast = fast->m_pNext;
        else
            return nullptr;
    }
    while(fast)
    {
        fast = fast->m_pNext;
        slow = slow->m_pNext;
    }
    return slow;
}

int main()
{
    int n;
    while (cin >> n) {
        // 建立单链表
        ListNode* head = new ListNode(-1);
        ListNode* cur = head;
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            ListNode* nxt = new ListNode(x);
            cur->m_pNext = nxt;
            cur = cur->m_pNext;
        }

        int k;
        cin >> k;

        ListNode* p = FindKthToTail(head->m_pNext, k);
        if (p)
            cout << p->m_nKey << endl;
    }

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

HJ52 计算字符串的编辑距离

描述
Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家 Levenshtein 提出的,故又叫 Levenshtein Distance 。

例如:

字符串A: abcdefg

字符串B: abcdef

通过增加或是删掉字符 ”g” 的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。

要求:

给定任意两个字符串,写出一个算法计算它们的编辑距离。

输入描述:
每组用例一共2行,为输入的两个字符串

输出描述:
每组用例输出一行,代表字符串的距离

代码:

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


int minDistance(string& word1, string& word2) {
    // 特判
    if (word1.empty())
        return word2.size();
    if (word2.empty())
        return word1.size();

    int len1 = word1.size(), len2 = word2.size();
    // 状态矩阵
    // dp[i,j]: word1到位置i为止,和word2到位置j为止,最少需要几步编辑
    vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0));
    // 初始化
    for (int i = 0; i <= len1; i++)
        dp[i][0] = i;
    for (int j = 0; j <= len2; j++)
        dp[0][j] = j;
    // 状态转移
    for (int i = 1; i <= len1; i++)
        for (int j = 1; j <= len2; j++) {
            // 当第i位和第j位对应的字符相同时,无需操作
            if (word1[i - 1] == word2[j - 1])
                dp[i][j] = dp[i - 1][j - 1];
            // 当二者对应的字符不同时,
            // 修改的消耗是dp[i-1][j-1]+1
            // 插入i位置/删除j位置的消耗是dp[i][j-1]+1,
            // 插入j位置/删除i位置的消耗是dp[i-1][j]+1
            else {
                int op1 = dp[i - 1][j - 1] + 1;
                int op2 = dp[i - 1][j] + 1;
                int op3 = dp[i][j - 1] + 1;
                dp[i][j] = min(op1, min(op2, op3));
            }
        }
    return dp[len1][len2];
}

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

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

HJ53 杨辉三角的变形

描述

求杨辉三角第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。

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

输出描述:
输出返回的int值

代码:

#include <iostream>
using namespace std;

int main() {
    // 规律:-1, -1, 2, 3, 2, 4, 2, 3, 2, 4...
    int n;
    cin >> n;
    if (n <= 2)
        cout << -1 << endl;
    else {
        int ans[] = {2, 3, 2, 4};
        cout << ans[(n - 3) % 4] << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

* HJ54 表达式求值

描述
给定一个字符串描述的算术表达式,计算出结果值。

输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。

输入描述:
输入算术表达式

输出描述:
计算出结果值

代码:

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

void compute(stack<int>& ns, stack<char>& ops) {
    int num2 = ns.top();
    ns.pop();
    int num1 = ns.top();
    ns.pop();
    char op = ops.top();
    ops.pop();

    int res;
    switch (op) {
        case '+':
            res = num1 + num2;
            break;
        case '-':
            res = num1 - num2;
            break;
        case '*':
            res = num1 * num2;
            break;
        case '/':
            res = num1 / num2;
            break;
    }
    ns.push(res);
}

// 比较运算符优先级
bool priority(char m, char n) {
    if (m == '(') // 括号优先级最高
        return false;
    // 加减法小于乘除法
    else if ((m == '+' || m == '-') && (n == '*' || n == '/'))
        return false;
    return true;
}

int main()
{
    string s;
    cin >> s;
    stack<int> ns;
    stack<char> ops;
    ops.push('(');
    s += ')';
    bool flag = false;
    for (int i = 0; i < s.length(); i++) {
        // 遇到左括号
        if (s[i] == '(' || s[i] == '[' || s[i] == '{')
            ops.push('(');
        // 遇到右括号
        else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
            // 弹出开始计算直到遇到左括号
            while (ops.top() != '(')
                compute(ns, ops);
            // 弹出左括号
            ops.pop();
        }
        // 遇到运算符
        else if (flag) {
            // 当s[i]的优先级小于等于栈顶符号优先级时,对栈顶进行一次计算,直到不符合条件
            while (priority(ops.top(), s[i]))
                compute(ns, ops);
            // 需要将当前运算符加入栈中等待运算
            ops.push(s[i]);
            flag = false;
        }
        // 遇到数字
        else {
            int j = i;
            if (s[j] == '-' || s[j] == '+')
                i++;
            while (isdigit(s[i]))
                i++;
            ns.push(stoi(s.substr(j, i - j)));
            i--;
            // 数字结束,下一次flag为true就是运算符了
            flag = true;
        }
    }
    cout << ns.top() << endl;

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

HJ55 挑7

描述
输出 1到n之间 的与 7 有关数字的个数。
一个数与7有关是指这个数是 7 的倍数,或者是包含 7 的数字(如 17 ,27 ,37 … 70 ,71 ,72 ,73…)

输入描述:
一个正整数 n 。( n 不大于 30000 )

输出描述:
一个整数,表示1到n之间的与7有关的数字个数。

代码:

#include <iostream>
using namespace std;

bool has7(int x) {
    bool judge = false;
    while (x) {
        if (x % 10 == 7) {
            judge = true;
            break;
        }
        x /= 10;
    }
    return judge;
}

int main() {
    int n;
    cin >> n;
    int count = 0;
    for (int i = 1; i <= n; i++) {
        if (i % 7 == 0 || has7(i))
            count++;
    }
    cout << count << endl;

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

HJ56 完全数计算

描述
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

输入描述:
输入一个数字n

输出描述:
输出不超过n的完全数的个数

代码:

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

bool isPrefect(int x) {
    vector<int> v;
    for (int i = 1; i < x; i++)
        if (x % i == 0)
            v.push_back(i);
    return accumulate(v.begin(), v.end(), 0) == x;
}

int main() {
    int n;
    cin >> n;

    int cnt = 0;
    for (int x = 1; x <= n; x++)
        if (isPrefect(x))
            cnt++;
    cout << cnt << endl;

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

HJ57 高精度整数加法

描述
输入两个用字符串 str 表示的整数,求它们所表示的数之和。

输入描述:
输入两个字符串。保证字符串只含有’0’~'9’字符

输出描述:
输出求和后的结果

代码:

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

int main() {
    string num1, num2;
    cin >> num1 >> num2;

    string ans;
    int i = num1.length() - 1, j = num2.length() - 1;
    int add = 0;
    while (i >= 0 || j >= 0) {
        int d1 = i >= 0 ? num1[i] - '0' : 0;
        int d2 = j >= 0 ? num2[j] - '0' : 0;
        int sum = d1 + d2 + add;
        i--;
        j--;
        ans.push_back(sum % 10 + '0');
        add = sum / 10;
    }
    if (add)
        ans.push_back('1');
    reverse(ans.begin(), ans.end());
    cout << ans << endl;

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

HJ58 输入n个整数,输出其中最小的k个

描述
输入n个整数,找出其中最小的k个整数并按升序输出

本题有多组输入样例

输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组

输出描述:
从小到大输出最小的k个整数,用空格分开。

代码:

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

int main() {
    int n, k;
    while (cin >> n >> k) {
        vector<int> v(n);
        for (int i = 0; i < n; i++)
            cin >> v[i];

        sort(v.begin(), v.end());

        for (int i = 0; i < k; i++)
            cout << v[i] << ' ';
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

HJ59 找出字符串中第一个只出现一次的字符

描述
找出字符串中第一个只出现一次的字符

输入描述:
输入一个非空字符串

输出描述:
输出第一个只出现一次的字符,如果不存在输出-1

代码:

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

int main() {
    string s;
    cin >> s;
    unordered_map<char, int> cnt;
    for (char& c : s)
        cnt[c]++;

    char ch;
    bool find = false;
    for (char& c : s)
        if (cnt[c] == 1) {
            find = true;
            ch = c;
            break;
        }
    if (find)
        cout << ch << endl;
    else
        cout << -1 << endl;

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

HJ60 查找组成一个偶数最接近的两个素数

描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

输入描述:
输入一个大于2的偶数

输出描述:
从小到大输出两个素数

代码:

#include <iostream>
using namespace std;

bool isPrime(int x) {
    for (int i = 2; i * i <= x; i++)
        if (x % i == 0)
            return false;
    return true;
}

int main() {
    int n;
    cin >> n;
    for (int i = n / 2; i >= 1; i--)
        if (isPrime(i) && isPrime(n - i)) {
            cout << i << endl << n - i << endl;
            break;
        }
    return 0;
}
// 64 位输出请用 printf("%lld")
华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解 每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。 阅读详情

相关推荐

2025华为OD机试题库目录【E卷+A卷+B卷+C卷+D卷】(JAVA、Python、C++、JS)

1:进入机考网页之后,如果链接上写着【2023.Q1 A卷】,就表示是2023年的Q1题库(4:订阅专栏后,后面更新的答案都可以查看。以后更新的题目也会放到这个专栏里。,如果时间紧迫,建议直接刷2023年新题。5:如果对题解有问题,私信我解答。2:2022年的题库。

AlgorithmHero的博客 2万+

2023华为机试真题

0,3]和[1,3]的公共区间为[1,3],[0,3]和[3,5]的公共区间为[3,3],[0,3]和[3,6]的公共区间为[3,3], [1,3]和[3,5]的共区间为[3,3],[1,3]和[3,6]的共区间为[3,3], [3,5]和[3,6]的公共区间为[3,5], 公共区间列表为[[1,3], [3,3], [3,5]],他们合并后的区间为[1,5]。任意两个给定区间的交集,称为公共区间(如:[1,2], [2,3]的公共区间为[2,2], [3,5],[3,6]的公共区间为[3,5])。

z_ssyy的博客 1万+

华为OD机试D卷——2024真题目录+在线练习地址(华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华为OD机试华)

本章为C、D卷题库目录。华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟考试时间。OD的工资待遇还是很可观的15K-30K*14-16,希望大家努力。本专栏完全免费,收费是为了防止被爬,订阅专栏后添加客服联系退款(平台抽取部分以及扣税部分不可退),由于平台冻结资金一个月,所以只能次月退款,如4月份可退3月份的订阅,5月份可退4月份订阅。大家收到退款之后可以在评论区发送 “已退款” 支持一下哦!

m0_66793065的博客 1万+

【华为机试】死记硬背没思路?一般人我劝你还是算了吧

华为机试有三道题,第一道和第二道属于简单题,分值为100分,第三道为困难题,分值为200分,总分400分,150分钟考试时间

学Java,找哪吒 1万+

华为OD机试真题2022(JavaScript)

本栏有100+道算法题,并提供正确解法和解题思路。保证都是牛客上的华为机试真题,大概率会考到原题。大家有什么问题可以留言探讨和交流

weixin_40767375的博客 1万+

华为OD机试 新系统 双机位C卷 真题题库目录|机考题库 + 算法考点详解

本文整理华为OD机试(机考) 新系统真题题库,提供高频考点精析与详细题目内容,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解 和 在线OJ做题练习。华为OD机试新系统真题题库。

qq_45776114的博客 10万+

华为机试真题练习汇总(共 108 题)

华为机试真题练习汇总(共 108 题)

ProgramNovice的博客 2917

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卷)

面试高手的博客 19万+

华为OD机试 2025 双机位A卷真题题库目录|机考题库 + 算法考点详解

本文整理华为OD 2025 双机位A卷 机试(机考)题库,提供高频考点精析与详细题目内容,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解以及在线OJ模拟做题。

qq_45776114的博客 1829

华为OD机试真题2022(JAVA)

本栏有110+道题,保证都是牛客上的HW机试真题,大概率会考到原题。大家有什么不懂的都可以留言。HW机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟考试时间。之前通过为150分,现在好像分数提高了,大家不要太大意,一定要多刷题,争取拿高分,毕竟分数越高评级越高,工资也就越高。OD的工资待遇还是很可观的15K-30K*14-16,希望大家努力(肺腑之言)

qq_34465338的博客 1万+

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

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

MISAYAONE的博客 29万+

某厂机试算法刷题一览

目录 1.【寻找身高相近的小朋友】 2.【火星文计算】 3.【最长的指定瑕疵度的元音字串】 4.【消消乐游戏】 5.【判断字符串子序列】 6.【整数对最小和】 7.【按区间反转文章片段】 8.【最长方连续方波信号】 9.【数组拼接】 10.【停车场车辆统计】 11.【乱序整数序列两数之和绝对值最小】 12.【最大括号深度】 13.【打印任务排序】 14.【单词接龙】 15.【数组去重和排序】 16.【找最小数】 17.【按身高和体重排队】 18.【勾股数元组】 19.【

@_南先生的博客 2万+

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

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

MISAYAONE的博客 34万+

【华为机试真题Java】从入门到入职-真题列表导读

本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题。大家有什么不懂的都可以留言。华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟考试时间。之前通过为150分,现在好像分数提高了,大家不要太大意,一定要多刷题,争取拿高分,毕竟分数越高评级越高,工资也就越高。OD的工资待遇还是很可观的15K-30K*14-16,希望大家努力(肺腑之言)

2169

【华为机试真题Python】从入门到入职-真题列表导读

华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟考试时间。之前通过为150分,现在好像分数提高了,大家不要太大意,一定要多刷题,争取拿高分,毕竟分数越高评级越高,工资也就越高。OD的工资待遇还是很可观的15K-30K*14-16,希望大家努力(肺腑之言)本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题。大家有什么不懂的都可以留言。真题列表(持续更新中)

3434

华为OD机试2025C卷真题题库目录|机考题库 + 算法考点详解

本文整理华为OD 2025C卷 机试(机考)题库,提供高频考点精析与详细题目内容,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 3992

【华为OD机试真题 Python语言】407、分配土地 | 机试真题+思路参考+代码解析(C卷)(本题100%)

题目描述 >从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字,某天全体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民,请问:此次分配土地,做出贡献的村民中最大会分配多大面积?

KJ.JK 5076

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

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

MISAYAONE的博客 20万+
上一篇: 华为机试真题练习汇总(41~50)
下一篇: 华为机试真题练习汇总(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、付费专栏及课程。

余额充值