算法学习——华为机考题库10(HJ64 - HJ69)

算法学习——华为机考题库10(HJ64 - HJ69)

HJ64 MP3光标位置

描述

MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。

现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:

歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。

光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。
在这里插入图片描述
在这里插入图片描述

输入说明:
1 输入歌曲数量
2 输入命令 U或者D

输出说明
1 输出当前列表
2 输出当前选中歌曲

示例

在这里插入图片描述

代码解析

#include <iostream>
using namespace std;int main() {int num;string str;cin>>num;cin>>str;int cur = 0;int left = 0,right;if(num >3) right = 3;else right = num-1;for(auto it:str){//  cout<<cur<<" "<<left<<' '<<right<<endl;if(it == 'U') {cur--;cur = cur%num;if(cur < 0) cur += num;if(num > 4){if(cur >= left && cur <= right ) {}else if( cur == num-1 ) { left = num - 1 - 3; right = num - 1; }else { left-- ; right--; }}}else if(it == 'D'){cur++;cur = cur%num;if(cur < 0) cur += num;if(num > 4){if(cur >= left && cur <= right ) {}else if( cur == 0 ) { left = 0; right =  3; }else { left++ ; right++; }}} }for(int i=left ; i<=right ; i++){cout<<i+1<<' ';}cout<<endl;cout<<cur+1;}
// 64 位输出请用 printf("%lld")

HJ65 查找两个字符串a,b中的最长公共子串

描述

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

数据范围:字符串长度 1≤length≤300
进阶:时间复杂度:O(n 3) ,空间复杂度:O(n)
输入描述:
输入两个字符串

输出描述:
返回重复出现的字符

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <string>
#include <vector>
using namespace std;int main() {string str1,str2;cin>>str1>>str2;if(str1.size() > str2.size()){string tmp = str1;str1 = str2;str2 = tmp;}int m = str1.size() , n = str2.size();vector<vector<int>> dp(m+1,vector<int>(n+1,0));int indnx , lenght = 0;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] + 1;if(dp[i][j] > lenght){lenght = dp[i][j];indnx = i;}}}// for(int i=0 ; i<=m ;i++)// {//     for(int j=0 ; j<=n ;j++)//     {//         cout<<dp[i][j]<<' ';//     }//     cout<<endl;// }string result(str1.begin()+indnx-lenght , str1.begin() + indnx);cout<<result;}
// 64 位输出请用 printf("%lld")

HJ66 配置文件恢复

描述

有6条配置命令,它们执行的结果分别是:
在这里插入图片描述
注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配(注:需从首字母开始进行匹配):

1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但匹配命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command

3、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果仍不唯一,匹配失败。
例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unknown command。
例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
4、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果唯一,匹配成功。例如输入:bo a,确定是命令board add,匹配成功。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:b addr,无法匹配到相应的命令,所以执行结果为:unknow command。
6、若匹配失败,打印“unknown command”

注意:有多组输入。
数据范围:数据组数:1≤t≤800 ,字符串长度1≤s≤20
进阶:时间复杂度:O(n) ,空间复杂度:O(n)
输入描述:
多行字符串,每行字符串一条命令

输出描述:
执行结果,每条命令输出一行

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;vector<pair<string, string>> instr = { {"reset",""},{"reset","board"},{"board","add"},{"board","delete"},{"reboot","backplane"},{"backplane","abort"}};    //存放每一对关键字vector<string> outstr = {    "reset what","board fault","where to add","no board at all","impossible","install first"};    //存放每条命令对应执行结果int main() {string str;while ( getline(cin,str) ) { // 注意 while 处理多个 casestringstream ss(str);string key;vector<string> date;while( getline(ss, key, ' ') ){date.push_back(key);}int count = 0;string result;for(int i=0 ; i<instr.size() ; i++){int i1 = instr[i].first.find(date[0]);int i2;if(date.size() == 2 ){i2 = instr[i].second.find(date[1]);}else if( date.size() == 1 && instr[i].second.empty() == 1){i2 = 0;}else i2 = -1;if( i1 == 0 && i2 == 0 ){count++;result = outstr[ i ];}}if(count == 1) cout<<result<<endl;else cout<<"unknown command"<<endl;str.clear();date.clear();}
}
// 64 位输出请用 printf("%lld")

HJ67 24点游戏算法

描述

给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。
输入描述:
读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。

输出描述:
对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false

示例

在这里插入图片描述

代码示例

#include <iostream>
#include <vector>using namespace std;bool flag = false;
void track(vector<double> &date ,vector<bool> &path , int indnx , double result)
{if( indnx > 4 || flag == true ) return;//cout<<indnx<<' '<<result<<endl;if(  result == 24 ){flag = true;return;}for(int i=0 ; i<date.size() ;i++){if(path[i] == false){path[i] = true;track(date, path, indnx + 1 , result + date[i]);track(date, path, indnx + 1 , result - date[i]);track(date, path, indnx + 1 , result * date[i]);track(date, path, indnx + 1 , result / date[i]);path[i] = false;}}}int main() {int tmp;vector<double> date;while (cin >> tmp) { // 注意 while 处理多个 casedate.push_back(tmp);}vector<bool> path(date.size(),false);track(date,path,0,0);if(flag == true) cout<<"true"<<endl;else cout<<"false"<<endl;}
// 64 位输出请用 printf("%lld")

HJ68 成绩排序

描述

给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩

都按先录入排列在前的规则处理。

例示:
jack 70
peter 96
Tom 70
smith 67

从高到低 成绩
peter 96
jack 70
Tom 70
smith 67

从低到高

smith 67

jack 70

Tom 70
peter 96

注:0代表从高到低,1代表从低到高

**数据范围:**人数:1≤n≤200
进阶:时间复杂度:O(nlogn) ,空间复杂度:O(n)
输入描述:
第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开

输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <utility>
#include <vector>
#include <string>
#include <algorithm>using namespace std;static bool cmp1( pair<string,int> a, pair<string,int>  b )
{return a.second > b.second;
}static bool cmp2( pair<string,int> a, pair<string,int>  b )
{return a.second < b.second;
}int main() {int n;int flag;vector<pair<string,int>> date;cin>>n;cin>>flag;string name;int num;while (n--) { // 注意 while 处理多个 casecin>>name>>num;pair<string, int> tmp;tmp.first = name;tmp.second = num;date.push_back( tmp );}if(flag == 0) stable_sort(date.begin(), date.end() , cmp1);else stable_sort(date.begin(), date.end() , cmp2);for(int i=0 ; i<date.size() ;i++)cout<<date[i].first<<' '<<date[i].second<<endl;return 0;
}
// 64 位输出请用 printf("%lld")

HJ69 矩阵乘法

描述

如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的
在这里插入图片描述
矩阵的大小不超过100*100
输入描述:
第一行包含一个正整数x,代表第一个矩阵的行数
第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数
第三行包含一个正整数z,代表第二个矩阵的列数
之后x行,每行y个整数,代表第一个矩阵的值
之后y行,每行z个整数,代表第二个矩阵的值

输出描述:
对于每组输入数据,输出x行,每行z个整数,代表两个矩阵相乘的结果

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <vector>using namespace std;int main() {int x1,x2,y1,y2;cin>>x1>>x2>>y2;y1 = x2;vector<vector<int>> date1(x1,vector<int>(y1,0));vector<vector<int>> date2(x2,vector<int>(y2,0));vector<vector<int>> result(x1,vector<int>(y2,0));int tmp;for(int i=0 ; i < x1 ; i++){for(int j=0 ; j < y1 ; j++){cin>>tmp;date1[i][j] = tmp;}}for(int i=0 ; i < x2 ; i++){for(int j=0 ; j < y2 ; j++){cin>>tmp;date2[i][j] = tmp;}}for(int i=0 ; i < x1 ; i++){for(int j=0 ; j < y2 ; j++){tmp = 0;for(int k=0 ; k< y1 ; k++){result[i][j] += (date1[i][k] * date2[k][j]);}cout<<result[i][j]<<' ';}cout<<endl;}}
// 64 位输出请用 printf("%lld")

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

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

相关文章

基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道

基于MATLAB实现的OFDM仿真调制解调&#xff0c;BPSK、QPSK、4QAM、16QAM、32QAM&#xff0c;加性高斯白噪声信道、TDL瑞利衰落信道 相关链接 OFDM中的帧&#xff08;frame&#xff09;、符号&#xff08;symbol&#xff09;、子载波&#xff08;subcarriers&#xff09;、导频…

数据库管理-第144期 深入使用EMCC-01(20240204)

数据库管理144期 2024-02-04 数据库管理-第144期 深入使用EMCC-01&#xff08;20240204&#xff09;1 用户管理2 配置告警动作3 配置意外事件规则总结 数据库管理-第144期 深入使用EMCC-01&#xff08;20240204&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&am…

大创项目推荐 题目:基于深度学习的人脸表情识别 - 卷积神经网络 大创项目推荐 代码

文章目录 0 简介1 项目说明2 数据集介绍&#xff1a;3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…

vscode1.86无法远程连接waiting the server log

问题 vscode升级到最新的1.86版本后&#xff0c;无法远程连接服务器Remote SSH&#xff0c;在log中提示如下&#xff1a; 观察下面的log提示可得&#xff1a; glibc的版本好像不符合vscode1.86版本的要求。你可以在你的服务器上运行下面的指令查看glibc的版本&#xff1a; …

【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术

目录 一、思维导图 二、 物理层概述 1.物理层概述 2.四大特性&#xff08;巧记"械气功程") 三、通信基础 1.数据通信基础 2.趁热打铁☞习题训练 3.信号の变身&#xff1a;编码与调制 4.极限数据传输率 5.趁热打铁☞习题训练 6.信道复用技术 推荐 前些天发…

服务器端会话技术-Session

一、Session 1.1 概述和快速入门 概述&#xff1a;Session 是服务器端会话技术&#xff0c;在一次会话的多次请求间共享数据&#xff0c;将数据保存在服务器端的对象中 快速入门 获取 HttpSession 对象使用 HttpSession 对象 常用方法 方法作用HttpSession request.getSe…

图像处理常用算法介绍

此篇简单回顾下图像处理领域常用到的一些算法&#xff0c;这边只对每个知识点重要的点做一些记录&#xff0c;便于快速的知其形&#xff0c;会其意。 一. SIFT&#xff08;Scale-Invariant feature transform)特征 重点是了解DOG(Difference of Gaussian)高斯差分图像是如何生…

ubuntu离线安装k8s

目录 一、前期准备 二、安装前配置 三、安装docker 四、安装cri-dockerd 五、部署k8s master节点 六、整合kubectl与cri-dockerd 七、网络等插件安装 八、常见问题及解决方法 一、前期准备 ①ubuntu系统 本地已安装ubuntu系统&#xff0c;lsb_release -a命令查看版本信…

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词&#xff1a; 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 前排提示&#xff1a;文末有CSDN独家网络安全资料包&#xff01; 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都…

Windows10安装PCL1.14.0及点云配准

一、下载visual studio2022 下载网址&#xff1a;Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 安装的时候选择"使用C的桌面开发“&#xff0c;同时可以修改文件路径&#xff0c;可以放在D盘。修改文件路径的时候&#xff0c;共享组件、…

Open CASCADE学习|拉伸

目录 1、沿方向拉伸 2、沿路径拉伸 3、变形拉伸 1、沿方向拉伸 #include <Geom_CylindricalSurface.hxx> #include <gp_Ax3.hxx> #include <GeomAPI_Interpolate.hxx> #include <BRepAdaptor_Curve.hxx> #include <BRepBuilderAPI_MakeEdge.hxx&…

追觅发布多款旗舰新品,双机械臂扫地机器人X40领衔登场

2月2日&#xff0c;追觅科技全球首创仿生“双”机械臂新品发布会在苏州举行。会上&#xff0c;追觅科技中国区总裁郭人杰分享了追觅科技全球化发展的业绩成果。郭人杰称&#xff0c;2019-2023年&#xff0c;追觅科技5年复合年增长率超过100%&#xff0c;增速领跑智能清洁行业&a…

LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】

文章目录 前言LeetCode、746. 使用最小花费爬楼梯【简单&#xff0c;动态规划 线性DP】题目与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。…

python的进程,线程、协程

python进程的实现 #coding:utf-8 from multiprocessing import Process import timedef run(name):print(%s is running % name)time.sleep(3)print(%s finished his run % name)if __name__ __main__:p Process(targetrun, args(XWenXiang,)) # 创建一个进程对象p.start()…

Redis(十二)Bigkey

文章目录 游标案例生成100万测试数据key生产上限制keys */flushdb/flushall等危险命令不使用keys *&#xff1a;scan Biigkey案例多大算大发现bigkey渐进式删除生产调优示例问题 游标案例 生成100万测试数据key shell: for((i1;i<100*10000;i)); do echo "set k$i v…

Nicn的刷题日常之调整奇数偶数顺序

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 2.解题思路 1. 给定两个下标left和right&#xff…

手拉手spring-boot-starter-mail实现发送QQ邮箱

技术栈 springbootmybatis-plusmysql 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1 mybatis-plus 3.5 spring-boot-starter-mail Springboot版本 spring boot对mail的封装支持非常好&#xff0c;方便&#xff0c;几行代码就可以把邮件集成进来…

调用Gensim库训练Word2Vec模型

一、前期工作&#xff1a; 1. 安装Gensim库 pip install gensim 2.安装chardet库 pip install chardet 3. 对原始语料分词 选择《人民的名义》的小说原文作为语料&#xff0c;先采用jieba进行分词 import jieba import jieba.analyse import chardet jieba.suggest_freq…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;决策树 决策树是多功能的机器学习算法&#xff0c;可以执行分类和回归任务&#xff0c;甚至多输出任务。它们…

麻雀搜索算法|Sparrow Search Algorithm(SSA)

在麻雀群体智慧、觅食和反捕食行为的启发下&#xff0c;提出了一种新的群体优化方法&#xff0c;即麻雀搜索算法&#xff08;SSA&#xff09;。 1、简介 在麻雀搜索算法中包含三种类型的麻雀个体&#xff0c;即发现者、跟随者和侦察者&#xff0c;三种类型对应三种行为。发现…