算法学习——华为机考题库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")
相关文章:

算法学习——华为机考题库10(HJ64 - HJ69)
算法学习——华为机考题库10(HJ64 - HJ69) HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲&a…...
[office] Excel中去除表格小数点后面数字的操作方法 #知识分享#学习方法
Excel中去除表格小数点后面数字的操作方法 如何去除EXCEL表格中小数点后面的数字,双击表格时只留有整数,今天,小编就教大家在Excel中去除表格小数点后面数字的操作方法。 Excel中去除表格小数点后面数字的操作步骤如下: 如图&…...

2023年度报告
欲买桂花同载酒,终不似,少年游! 思来想去,虽然迟到一月,还是觉得要写上一篇年度总结报告回忆过去的一年(准确来说是半年,毕竟前年的年终总结报告是在去年的5月末写的), …...

基于springboot智慧养老平台源码和论文
首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…...

IDEA插件ChatGPT - Easycode安装使用
IDEA插件ChatGPT - Easycode简介 ChatGPT - Easycode 是一个由 OpenAI 开发的 IntelliJ IDEA 插件,它可以利用 ChatGPT 的强大语言生成能力,帮助开发人员提高编码效率。 主要功能: 代码生成:可以根据自然语言描述生成代码&…...

设置 相关
记录使用过程中做的设置相关事宜。方便后续查询 vscode如何自动生成html格式: vscode快速生成html模板 --两种方法,亲测有用_vscode自动生成html模板-CSDN博客 使用第二个方式。存储html格式后缀。输入!,vscode自动补全。 安装…...

argcomplete,一个超酷 Python 库!
前言 大家好,今天为大家分享一个超酷的 Python 库 - argcomplete。 Github地址:https://github.com/kislyuk/argcomplete 命令行工具是开发者和系统管理员的得力助手,但随着命令行选项的增多,用户可能会感到困惑。Python 中的 a…...

<设计模式>单例模式懒汉和饿汉
目录 一、单例模式概述 二、懒汉模式和饿汉模式 1.饿汉模式 1.1代码实现 1.2实现细节 1.3模式优劣 2.懒汉模式 2.1代码实现 2.2实现细节 2.3模式优劣 三、多线程下的线程安全问题 1.懒汉和饿汉线程安全问题分析 1.1安全的饿汉模式 1.2不安全的懒汉模式 2.懒汉线程…...

二分查找------蓝桥杯
题目描述: 请实现无重复数字的升序数组的二分查找 给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的target,如果目标值存在返回下标 (下标从0 开始),否则返回-1 数据范围: 0 < l…...

今日arXiv最热NLP大模型论文:微软提出SliceGPT,删除25%模型参数,性能几乎无损
引言:探索大型语言模型的高效压缩方法 随着大型语言模型(LLMs)在自然语言处理领域的广泛应用,它们对计算和内存资源的巨大需求成为了一个不容忽视的问题。为了缓解这些资源限制,研究者们提出了多种模型压缩方法&#…...
ChatGPT实战100例 - (13) 写一个属于自己的 ChatGPT 新版 WebUI
文章目录 ChatGPT实战100例 - (13) 写一个属于自己的 ChatGPT 新版 WebUI一、ChatGPT(OpenAI)的新版API调用1.1 环境变量配置与调用1.2 新版api调用1.3 命令行流式输出二、Gradio制作自己的聊天WebUI2.1 流式WebUI2.2 样式调整三、总结参考ChatGPT实战100例 - (13) 写一个属于自…...

【计算机学院寒假社会实践】——服务走进社区,共绘幸福蓝图
为深入贯彻落实志愿者服务精神,扎实推进志愿者服务质量,2024年1月28日,曲阜师范大学计算机学院“青年扎根基层,服务走进社区”社会实践队队员周兴睿在孙宇老师的指导下,来到山东省滨州市陈集街道社区开展了为期一天的“…...

[python] 过年燃放烟花
目录 新年祝福语 一、作品展示 二、作品所用资源 三、代码与资源说明 四、代码库 五、完整代码 六、总结 新年祝福语 岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。 回首过去…...

数据结构与算法:图论(邻接表板子+BFS宽搜、DFS深搜+拓扑排序板子+最小生成树MST的Prim算法、Kruskal算法、Dijkstra算法)
前言 图的难点主要在于图的表达形式非常多,即数据结构实现的形式很多。算法本身不是很难理解。所以建议精通一种数据结构后遇到相关题写个转换数据结构的接口,再套自己的板子。 邻接表板子(图的定义和生成) public class Graph…...

Python之PySpark简单应用
文章目录 一、介绍1.准备工作2. 创建SparkSession对象:3. 读取数据:4. 数据处理与分析:5. 停止SparkSession: 二、示例1.读取解析csv数据2.解析计算序列数据map\flatmap 三、问题总结1.代码问题2.配置问题 一、介绍 PySpark是Apa…...
降维(Dimensionality Reduction)
一、动机一:数据压缩 这节我将开始谈论第二种类型的无监督学习问题,称为降维。有几个原因使我们可能想要做降维,其一是数据压缩,它不仅允许我们压缩数据使用较少的计算机内存或磁盘空间,而且它可以加快我们的学习算法。…...
web应用(网页)怎样调用浏览器插件(如metamask小狐狸钱包)
下边是与gpt的对话,代码可以在浏览器控制台验证 一,在网页上点击一个连接按钮 然后小狐狸钱包就打开了,是怎么实现的呢 当你在网页上点击一个连接按钮,然后自动打开MetaMask(通常被称为“小狐狸钱包”,一种…...

2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)
大家好呀,从发布赛题一直到现在,总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…...

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】
文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…...
window 挂载linux 网盘
背景:因为很多情况下,作为开发人员,我们都希望用Linux的编译环境,但是可以用windows下各种IDE来写code; linux 服务器安装NFS服务 说明:NFS 服务就是让不同的计算机可以在不同的操作系统之间共享文件,采用的就是服务端/客户端的架构,在NFS服务器上将目录设置为输出目录(…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...