算法学习——华为机考题库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.mzph.cn/news/667945.shtml

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

相关文章

代码随想录算法训练营Day24 | 回溯理论基础、77.组合

回溯理论基础 回溯和递归是相辅相成的&#xff0c;只要有递归就有回溯&#xff08;执行完一次递归就自动回溯到上一层&#xff09; 回溯的效率 回溯不是一个高效的算法&#xff0c;而是一个纯暴力的过程 有些问题没有更好的解法&#xff0c;只能使用暴力搜索&#xff0c;这时…

ReactNative实现的横向滑动条

OK&#xff0c;我们先看下效果图 注意使用到了两个库 1.react-native-linear-gradient 2.react-native-gesture-handler ok&#xff0c;我们看下面的代码 import {Image, TouchableWithoutFeedback, StyleSheet, View} from react-native; import LinearGradient from reac…

Linux---信号

前言 到饭点了&#xff0c;我点了一份外卖&#xff0c;然后又开了一把网游&#xff0c;这个时候&#xff0c;我在打游戏的过程中&#xff0c;我始终记得外卖小哥会随时给我打电话&#xff0c;通知我我去取外卖&#xff0c;这个时候游戏还没有结束。我在打游戏的过程中需要把外…

考研中常见的算法-逆置

元素逆置 概述&#xff1a;其实就是将 第一个元素和最后一个元素交换&#xff0c;第二个元素和倒数第二个元素交换&#xff0c;依次到中间位置。用途&#xff1a;可用于数组的移动&#xff0c;字符串反转&#xff0c;链表反转操作&#xff0c;栈和队列反转等操作。 逆置图解 …

vulhub中Apache APISIX 默认密钥漏洞复现(CVE-2020-13945)

Apache APISIX是一个高性能API网关。在用户未指定管理员Token或使用了默认配置文件的情况下&#xff0c;Apache APISIX将使用默认的管理员Token edd1c9f034335f136f87ad84b625c8f1&#xff0c;攻击者利用这个Token可以访问到管理员接口&#xff0c;进而通过script参数来插入任意…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Menu组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Menu组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间…

leetcode142 环形链表 II

文章目录 1. 解法&#xff1a;快慢指针2. 原题 [142. 环形链表 II](https://leetcode.cn/problems/linked-list-cycle-ii/) 1. 解法&#xff1a;快慢指针 定义两个指针fast和slow&#xff0c;同时从链表头出发&#xff0c;fast每次走两步&#xff0c;slow每次走1步&#xff0c…

ShardingSphere 5.x 系列【5】Spring Boot 3.1 集成Sharding Sphere-JDBC并实现读写分离

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

[Angular 基础] - 数据绑定(databinding)

[Angular 基础] - 数据绑定(databinding) 上篇笔记&#xff0c;关于 Angular 的渲染过程及组件的创建&简单学习&#xff1a;[Angular 基础] - Angular 渲染过程 & 组件的创建 Angular 之中的 databinding 是一个相对而言更加复杂&#xff0c;以及我个人觉得相对而言比…

算法笔记刷题日记——3.简单入门模拟 3.1简单模拟

刷题日记 3.1 简单模拟 此类题型根据题目描述进行代码的编写&#xff0c;考察代码能力&#xff0c;刷题记录如下&#xff1a; B1001 B1032 B1016 B1026 B1046 B1008 B1012 B1018 A1042 A1046 A1065 B1010 A1002 A1009 错题记录 B1008 数组元素循环右移问题 一个数组_A_中存有…

[机缘参悟-145] :一个软件架构师对佛学的理解 -9- 修行的目标和层次:净心、智慧和解脱

目录 前言&#xff1a; 第一层次&#xff08;小乘&#xff09;&#xff1a;净心&#xff0c;摆脱痛苦和烦扰&#xff0c;进入平静和安宁 1.1 什么是净心 1.2 如何达到净心的状态 1.3 "常乐我净" 第二层次&#xff08;中乘&#xff09;&#xff1a;智慧&#xf…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

【Linux】进程间通信 --管道通信

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 进程间通信原理1. 匿名管道1.1 通信原理1.2 接口介绍 2. 命名管道2.1 接口介绍 3. 共享内存3.1 通信原理3.2 接口介绍 0. 进…

用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时&#xff0c;网络上的每一层都会涉及不同的协议&#xff0c;具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例&#xff1a; 物理层&#xff1a;负责将比特流传输到物理媒介上&#xff0c;例如电缆或无线信号。所以在物理层&#xff0c;可…

Dell服务器iDRAC9忘记密码, 通过RACADM工具不重启 重置密码

系列文章目录 文章目录 系列文章目录前言一、RACADM工具二、linux环境1.解压安装RACADM工具测试RACADM工具重置iDRAC密码 Windows环境 前言 一、RACADM工具 RACADM工具 官网参考信息 https://www.dell.com/support/kbdoc/zh-cn/000126703/%E5%A6%82%E4%BD%95-%E9%87%8D%E7%BD…

计算机网络-封装成帧透明传输(组帧方法)

文章目录 数据链路层功能概述封装成帧透明传输组帧方法字符计数法字符填充法零比特填充法违规编码法 字符填充法为啥复杂和不兼容 数据链路层功能概述 类似老板让小秘书送文件给别的公司&#xff0c;小秘书告诉傻子怎么把该文件送到别的公司的小秘书&#xff0c;然后别的公司的…

修改UnityEngine dll

修改UnityEngine dll 由于有些版本的dll与热重载并不兼容&#xff0c;需要小幅修改代码。 使用dnspy工具 我们使用 dnspy 来修改 dll文件。而dnspy只能在Win下运行&#xff0c;故哪怕是mac版本dll&#xff0c; 你也得先将相应dll复制到Win下后再修改。下载 dnspy&#xff0c…

FastAdmin青动CRM-E售后

应用介绍 一款基于FastAdminThinkPHP和uniapp开发的CRM售后管理系统&#xff0c;旨在助力企业销售售后全流程精细化、数字化管理&#xff0c;主要功能&#xff1a;客户、合同、工单、任务、报价、产品、库存、出纳、收费&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机…

服务器使用过程中遇到常见故障及解决方案(包括蓝屏死机、无法删除的文件如何清理、网络卡、服务器连接不上等)

互联网时代&#xff0c;服务器的安全性和稳定性尤为重要&#xff0c;支撑着整个互联网行业的信息和数据安全。最近经常有客户咨询服务器的日常故障排除方法。由于服务器复杂的硬件结构和繁琐的运行原理&#xff0c;经常会出现这样那样的问题&#xff0c;有时即使是最小的问题也…

item_get_video-获取视频详情(bili.item_get_video)

B站&#xff08;Bilibili&#xff09;的item_get_video API用于获取视频的详细信息。通过调用该API&#xff0c;您将能够获得视频的基本信息、元数据、播放链接等。这使得开发者可以轻松地将B站视频集成到自己的应用程序或网站中&#xff0c;为用户提供更丰富的内容和更好的体验…