算法学习——华为机考题库8(HJ46 - HJ55)

算法学习——华为机考题库8(HJ46 - HJ50)

HJ46 截取字符串

描述

输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出

数据范围: 字符串长度满足 1≤n≤1000 , 1≤k≤n
输入描述:
1.输入待截取的字符串

2.输入一个正整数k,代表截取的长度

输出描述:
截取后的字符串

示例

在这里插入图片描述

代码解析

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

int main() {
   string Str;
   cin>>Str;
   int k;
   cin>>k;
   Str = Str.substr(0,k);
   cout<<Str;
}
// 64 位输出请用 printf("%lld")

HJ48 从单向链表中删除指定值的节点

描述

输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

链表的值不能重复。

构造过程,例如输入一行数据为:
6 2 1 2 3 2 5 1 4 5 7 2 2
则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:
1 2 表示为
2->1
链表为2->1

3 2表示为
2->3
链表为2->3->1

5 1表示为
1->5
链表为2->3->1->5

4 5表示为
5->4
链表为2->3->1->5->4

7 2表示为
2->7
链表为2->7->3->1->5->4

最后的链表的顺序为 2 7 3 1 5 4

最后一个参数为2,表示要删掉节点为2的值
删除 结点 2

则结果为 7 3 1 5 4

数据范围:链表长度满足 1≤n≤1000 ,节点中的值满足 0≤val≤10000

测试用例保证输入合法

输入描述:
输入一行,有以下4个部分:
1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值

输出描述:
输出一行
输出删除结点后的序列,每个数后都要加空格

示例

在这里插入图片描述

代码解析

#include <bits/types/struct_tm.h>
#include <ctime>
#include <iostream>
using namespace std;

class Node
{
public:
    int value;
    Node* next;
    Node():value(0),next(nullptr){}
    Node(int a):value(a),next(nullptr) {}
    Node(int a , Node* b):value(a),next(b) {}
};

int main() {
    int num,head_value;
    cin>>num;
    cin>>head_value;
    Node* Head = new Node(head_value);

    for(int i=0 ; i < num-1 ; i++)
    {
        int value,insertValue;
        cin>>value;
        cin>>insertValue;
        // cout<<value<<' '<<insertValue<<endl;
        Node* tmp = Head;

        while(tmp != nullptr)
        {
            if(tmp->value == insertValue)
            {
                Node* nextNode = tmp->next;
                Node* cur = new Node(value,nextNode);
                tmp->next = cur;
                break;
            }
            tmp = tmp->next;
        }
    }
    int delate;
    cin>>delate;

    Node* tmp = Head;
    while(tmp != nullptr)
    {
        if(tmp->value != delate) cout<<tmp->value<<' ';
        tmp= tmp->next;
    }
}
// 64 位输出请用 printf("%lld")

HJ50 四则运算

描述

输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。

**数据范围:**表达式计算结果和过程中满足 ∣val∣≤1000 ,字符串长度满足 1≤n≤1000

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

输出描述:
得到计算结果

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <stack>
 
using namespace std;
 
int pos;
 
int compute(string & data)
{
    int len = data.length();
    int num = 0;
    char flag = '+';
    stack<int> st;
 
    while (pos < len) 
    {
        if (data[pos] == '{' || data[pos] == '[' || data[pos] == '(') 
        {
            pos++;
            num = compute(data);
        }
 
        while (pos < len && isdigit(data[pos])) 
        {
            num = num * 10 + data[pos] -'0';
            pos++;
        }
 
        switch (flag) 
        {
        case '+':
            st.push(num);
            break;
        case '-':
            st.push(-num);
            break;
        case '*':
            {
                int temp = st.top();
                temp *= num;
                st.pop();
                st.push(temp);
                break;
            }
        case '/':
            {
                int temp = st.top();
                temp /= num;
                st.pop();
                st.push(temp);
                break;
            }
        }
 
        num = 0;
        flag = data[pos];
        if (data[pos] == '}' || data[pos] == ']'|| data[pos] == ')') 
        {
            pos++;
            break;
        }
        pos++;
    }
 
    int sum = 0;
    while (st.size()) {
        sum += st.top();
        st.pop();
    }
    return sum;
}
 
int main()
{
    string data;
 
    while (cin >> data) {
        pos = 0;
        cout << compute(data) << endl;
    }
    return 0;
}

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

描述

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

链表结点定义如下:

struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
};

正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
**数据范围:**链表长度满足 1≤n≤1000 , k≤n ,链表中数据满足 0≤val≤10000

本题有多组样例输入。

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

输出描述:
输出一个整数

示例

在这里插入图片描述

代码解析

#include <bits/types/struct_tm.h>
#include <iostream>
using namespace std;

struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
};

int main() {
    int num;
   

    while(cin>>num)
    {
        ListNode *head = new ListNode();
        int date; 
        ListNode *tmp;
        for(int i=0 ; i<num ; i++)
        {
            cin>>date;
            if(i==0)
            {
                head->m_nKey = date;
                tmp = head;
            }else 
            {
                ListNode *cur = new ListNode();
                cur->m_nKey = date;
                tmp->m_pNext = cur;
                tmp = tmp->m_pNext;
            }
        }

        int k;
        cin>>k;
        ListNode *fast = head , *low = head;
        while(k--) fast = fast->m_pNext;

        while(fast != nullptr) 
        {
            fast = fast->m_pNext;
            low = low ->m_pNext;
        }
        cout<<low->m_nKey<<endl;
    }
   
}
// 64 位输出请用 printf("%lld")

HJ52 计算字符串的编辑距离

描述

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

例如:

字符串A: abcdefg

字符串B: abcdef

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

要求:

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

**数据范围:**给定的字符串长度满足 1≤len(str)≤1000

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

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

示例

在这里插入图片描述

代码解析

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

int main() {
    string str1 , str2;
    cin>>str1>>str2;
    int m = str1.size();
    int n = str2.size();

    vector<vector<int>> dp(m+1 , vector<int>(n+1 , 0));
    
    for(int i=0 ; i<= m ; i++)
        dp[i][0] = i;

    for(int j=0 ; j<= n ; j++)
        dp[0][j] = j;

    for(int i=1 ; i<= m ; i++)
    {
        for(int j=1 ; j<= n ; j++)
        {
            if(str1[i-1] == str2[j-1]) dp[i][j] = dp[i-1][j-1];
            else dp[i][j] = min( dp[i-1][j-1] + 1 , min( dp[i-1][j] + 1 , dp[i][j-1] + 1 ));
        }
    }

    cout<<dp[m][n];
    


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

HJ53 杨辉三角的变形

描述

在这里插入图片描述

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。

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

数据范围: 1≤n≤10 9

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

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

示例

在这里插入图片描述

代码解析

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

int main() {
    int N;
    cin>>N;
    if(N==0 || N==1 || N==2) cout<<"-1";
    else if(N%4 == 0) cout<<"3";
    else if(N%4 == 1) cout<<"2";
    else if(N%4 == 2) cout<<"4";
    else  cout<<"2";
    
}
// 64 位输出请用 printf("%lld")

HJ55 挑7

描述

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

数据范围: 1≤n≤30000
输入描述:
一个正整数 n 。( n 不大于 30000 )

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

示例

在这里插入图片描述

代码解析

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

int main() {
    int n;
    cin>>n;
    int flag = 0;
    for(int i=1 ; i <= n ; i++)
    {
        if( i%7 == 0) flag++;
        else
        {
            string tmp = to_string(i);
            if(tmp.find('7') != -1) flag++;
        };
    }
    cout<<flag;
}
// 64 位输出请用 printf("%lld")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring boot学习第九篇:操作mongo的集合和集合中的数据

1、安装好了Mongodb 参考&#xff1a;ubuntu安装mongod、配置用户访问、添删改查-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns…

洛谷_P1014 [NOIP1999 普及组] Cantor 表_python写法

这道题其实没什么特别的&#xff0c;最重要就是仔细分析找到其中的数学规律。 以斜着为行&#xff0c;每一行的数值就是与第几行有关。 那对于Z字形而言就是行数的奇偶判断。 n int(input()) ans 0 flag 0 l [0] while ans < n:flag 1ans flag ans - flag n - ans j …

VPP学习-VPP初始化流程

概念 VPP作为一个开源的、高性能的用户态网络协议栈&#xff0c;以进程的形式运行于Linux或&#xff08;类unix&#xff09;系统下&#xff0c;即VPP实际是一个用户进程&#xff0c;VPP启动后可通过"ps -ef | grep vpp"命令查看。 VPP启动 用户态进程启动都有一个ma…

如何选择旅游路线,使得假期旅游路费最少?

旅行是许多人的热爱&#xff0c;但是在规划一个完美的假期时&#xff0c;找到最经济的路线常常是一个挑战。这里就需要引入一个著名的优化问题——旅行商问题。本文将介绍TSP的基础知识&#xff0c;并使用MTZ消除子环方法优化一个简单的TSP问题的示例。 旅行商问题简介 TSP&a…

springboot war包部署 和jar包部署

文章目录 war包部署设置打包方式为war排除内嵌的tomcat在插件中指定入口类打包测试 jar包部署设置打包方式执行打包测试访问修改插件版本指定jsp打包配置 重新打包测试 war包部署 设置打包方式为war 执行项目打包的方式为 "war" 默认创建springboot项目打包都是ja…

2024.2.4 awd总结

学习一下awd的靶机信息 防御阶段 感觉打了几次awd&#xff0c;前面阶段还算比较熟练 1.ssh连接 靶机登录 修改密码 [root8 ~]# passwd Changing password for user root. New password: Retype new password: 2.xftp连接 备份网站源码 xftp可以直接拖过来 我觉得这步还…

【详解】斗地主随机发牌项目

目录 前言&#xff1a; 1.初始化牌 2.洗牌 3.揭牌 总代码&#xff1a; Card类&#xff1a; CardGame类&#xff1a; Main类&#xff1a; 结语&#xff1a; 前言&#xff1a; 斗地主是全国范围内的一种桌面游戏&#xff0c;本节我们来实现一下斗地主中的简单初始化牌、…

Day 38 | 动态规划 理论基础 、 509. 斐波那契数 、 70. 爬楼梯 、746. 使用最小花费爬楼梯

理论基础 文章讲解 视频讲解 动态规划五部曲 509. 斐波那契数 题目 文章讲解 视频讲解 思路&#xff1a; class Solution {public int fib(int n) {if (n < 2)return n;int a 0, b 1, c 0;for (int i 1; i < n; i) {c a b;a b;b c;}return c;} }70. 爬楼梯…

深度解析源码,Spring 如何使用三级缓存解决循环依赖

目录 一. 前言 二. 基础知识 2.1. 什么是循环依赖&#xff1f; 2.2. 三级缓存 2.3. 原理执行流程 三. 源码解读 3.1. 代码入口 3.2. 第一层 3.3. 第二层 3.4. 第三层 3.5. 返回第二层 3.6. 返回第一层 四. 原理深度解读 4.1. 什么要有三级缓存&#xff1f; 4.2.…

百面嵌入式专栏(面试题)驱动开发面试题汇总1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux驱动程序的功能是什么? 对设备初始化和释放。进行内核与硬件的数据交互。检测和处理设备出现的错误。2、内核程序中申请内存使用什么函数? 答案:kmalloc()、kzalloc()、vm…

Camunda流程引擎数据库架构

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;数据库架构…

vue3 mathjax2.7.7 数学公式

1. index.html代码部分 <script type"text/x-mathjax-config">MathJax.Hub.Config({extensions: ["tex2jax.js"],jax: ["input/TeX","output/HTML-CSS"],tex2jax: {inlineMath: [["$","$"],["\\(&quo…

软件测试学习笔记-使用jmeter进行性能测试

性能测试&#xff1a;使用自动化工具&#xff0c;模拟不同的场景&#xff0c;对软件各项性能指标进行测试和评估的过程。 性能测试的目的&#xff1a; 评估当前系统的能力寻找性能瓶颈&#xff0c;优化性能评估软件是否能够满足未来的需要 性能测试和功能测试对比 焦点不同&…

沁恒微WCH32v003驱动ST7735S硬件spi+DMA调试小坑(2)

上一篇文章解决了spidma传输数据时DC线操作时序不匹配的问题&#xff0c;但是屏幕依旧没有点亮&#xff0c;所以这一篇文章继续找还存在的问题。上一篇文章&#xff1a;沁恒微WCH32v003驱动ST7735S硬件spiDMA调试小坑-CSDN博客 老规矩&#xff0c;先用逻辑分析仪抓取一下波形。…

幻兽帕鲁怎么样?好玩? Mac版的玩《幻兽帕鲁》也很简单,只需三个步骤

幻兽帕鲁怎么样 幻兽帕鲁是一款集合了多种游戏元素的游戏&#xff0c;它巧妙地融合了《方舟:生存进化》的野外生存挑战、《荒野之息》的开放世界探索、《魔兽世界》的多元角色互动以及宝可梦的精灵捕捉与培养等经典游戏元素。游戏的核心系统是「帕鲁」捕获&#xff0c;你可以让…

Redis -- zset有序集合

聪明在于勤奋&#xff0c;天才在于积累。 目录 zset 有序集合 zset相关命令 zadd zcard zcount zrange zrevrange zrangebyscore zpopmax bzpopmax zpopmin bzpopmin zrank zscore zrem zRemRangeByRank zRemRangeByScore zincrby 集合间操作 zinte…

光学PCIe 6.0技术引领AI时代超大规模集群

随着云计算、大数据和人工智能技术的快速发展&#xff0c;超大规模数据中心正经历一场前所未有的变革。传统的集中式架构逐渐转变为解聚式&#xff08;disaggregated&#xff09;架构&#xff0c;这种架构将计算、存储和网络资源从单一的物理服务器中分离出来&#xff0c;形成独…

【Vue3】解决路由缓存问题(响应路由参数的变化)

官方文档解释&#xff1a; 解决问题的思路: 让组件实例不复用,强制销毁重建监听路由变化,变化之后执行数据更新操作 方案一&#xff1a;给router-view添加key 以当前路由完整路径为key 的值&#xff0c;给router-view组件绑定 <RouterView :key"$route.fullPath&qu…

C++-模板基础

1. 泛型编程 大家在学习过程中一定写过swap函数吧&#xff0c;那么swap函数的可以写成很多种形式&#xff0c;因为形参的类型可以是任意类型&#xff0c;那么我们如果想用多种swap函数的话&#xff0c;就意味着我们必须写多个swap函数吗&#xff1f;不是的&#xff0c;C为了解…

Android14之Selinux报错:unknown type qemu_device at token (一百八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…
最新文章