算法学习——华为机考题库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.hqwc.cn/news/453183.html

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

相关文章

Go语言深度解析:探索 crypto/md5 标准库的强大功能

Go语言深度解析&#xff1a;探索 crypto/md5 标准库的强大功能 引言Go语言和MD5的基础知识MD5算法简介Go语言概述Go中的MD5实现 crypto/md5 库的使用方法基本用法处理大型数据安全注意事项 实际案例分析示例1&#xff1a;文件的MD5校验示例2&#xff1a;网络数据的MD5哈希示例3…

专业课130+总分420+南京大学851信号与系统考研经验南大电子信息与通信系统

经过一年的复习&#xff0c;顺利上岸&#xff0c;被南京大学录取&#xff0c;今年专业课130&#xff0c;总分420&#xff0c;回忆这一年的复习还是有很多经验分享&#xff0c;希望对大家复习有帮助。 专业课&#xff1a; 南京大学851信号与系统难度这几年无论是范围还是难度都…

Java使用规范

1.关键字 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串(单词) 特点&#xff1a;关键字中的所有字母都是小写 2.保留字 java保留字&#xff1a;现有Java版本尚未使用&#xff0c;但以后的版本可能会作为关键字使用。命名标识符时要避免使用这些…

回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&…

【Linux系统 01】Vim工具

目录 一、Vim概述 1. 文件打开方式 2. 模式切换 二、命令模式 1. 移动与跳转 2. 复制与粘贴 3. 剪切与撤销 三、编辑模式 1. 插入 2. 替换 四、末行模式 1. 保存与退出 2. 查找与替换 3. 分屏显示 4. 命令执行 一、Vim概述 1. 文件打开方式 vim 文件路径&#…

Mocaverse NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT&#xff08;非同质化代币&#xff09;系列&#xff0c;包含 8,888 个独特的 "M…

微服务入门篇:Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

目录 1.Nacos安装1.官网下载2.解压到本地3.启动nacos 2.Nacos快速入门1.在父工程中导入nacos依赖2.给子项目添加客户端依赖3.修改对应服务的配置文件4.启动服务&#xff0c;查看nacos发现情况 3.Nacos服务多级存储模型4.NacosRule负载均衡5. 服务实例的权重设置6.环境隔离&…

HTML5和CSS3强化知识总结

HTML5的新特性 HTML5的新增特性主要是针对于以前的不足&#xff0c;增一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 HTML5新增的语义…

oracle主库增加redo组数

redo log&#xff08;重做日志&#xff09;&#xff1a; 重做日志&#xff1a;简单来说就是&#xff0c;将oracle数据库的DML、DDL&#xff08;数据库操作语言&#xff0c;数据库定义i语言&#xff09;操作记录在日志中&#xff0c;方便恢复及备库使用&#xff0c;以组的方式管…

中科大计网学习记录笔记(六):应用层概述 | 应用层原理

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

Android Studio 安装Flutter插件但是没法创建项目

Android Studio 安装Flutter插件但是没法创建项目 如果你在Android Studio已经安装了Dart、Flutter插件&#xff0c;但是不能创建Flutter项目。 原因是因为Android Studio的版本更新&#xff0c;Android APK Support这个插件没被选中。 一旦勾选这个插件之后&#xff0c;就能…

Linux校准时间 Centos

Linux校准时间 Centos 首先&#xff0c;确保系统中已经安装了tzdata包。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo yum install tzdata设置系统时区为上海&#xff1a; sudo timedatectl set-timezone Asia/Shanghai验证时区设置是否生效&#xff1a;…