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

news2024/11/27 22:28:31

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

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 处理多个 case

        stringstream 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 处理多个 case
        date.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")

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

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

相关文章

代码随想录算法训练营第三十五天|343. 整数拆分 , 96.不同的二叉搜索树

343. 整数拆分 代码随想录 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili class Solution {public int integerBreak(int n) {// 1.确定dp数组&#xff08;dp table&#xff09;以及下…

【git】本地项目推送到github、合并分支的使用

1. github上创建仓库信息 点击个人头像&#xff0c;选择【你的仓库】 点击【新增】 填写仓库信息 2. 本地项目执行的操作 1.生成本地的git管理 (会生成一个.git的文件夹) git init 2.正常提交到暂存区&#xff0c;并填写提交消息 git add . git commit -m "init…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语&#xff0c;用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法&#xff0c;即 Do&#xff0c;该方法接收一个函数参数。在 Do 方法被调用后&#xff0c;该函数将被执行&#xff0c;而且只会执行一…

Python算法题集_搜索二维矩阵II

Python算法题集_搜索二维矩阵II 题41&#xff1a;搜索二维矩阵II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【行尾检测】3) 改进版二【对角线划分】 4. 最优算法 本文为Python算法题集之一的代码示例 题41&#xf…

Oracle 面试题 | 12.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

国辰智企APS自动化排产平台:实现生产计划与其他系统无缝协同

在当今竞争激烈的制造环境中&#xff0c;有效的生产计划和排程对于企业的成功至关重要。APS生产计划排程平台作为一种先进的工具&#xff0c;正越来越受到企业的关注和应用。那么&#xff0c;APS生产计划排程平台有哪些类型呢&#xff1f;本文将为您详细介绍。 1.基于规则的APS…

Java学习-内部类

内部类概述 1.成员内部类 注意&#xff1a; 2.静态内部类 3.局部内部类&#xff08;看看就行&#xff09; 4.匿名内部类 应用场景&#xff1a;通常作为一个参数传给方法 Eg.小猫和小狗都参加游泳比赛

Open CASCADE学习|分割曲线

1、通过参数进行分割 分别获得曲线的 FirstParameter 和 LastParameter &#xff0c;然后对参数进行分割&#xff0c;获得n个ui&#xff0c;并对每个ui调用D0&#xff08;获得这个点的坐标值&#xff09;或D1&#xff08;获得这个点的坐标值和切向量&#xff09;。这个方法的优…

【MySQL进阶】事务原理

文章目录 事务机制基本介绍事务管理基本操作提交方式事务 ID 隔离级别四种级别加锁分析 原子特性实现方式实现原理undo log 隔离特性实现方式MVCC实现原理隐藏字段undo logRead View RC RR 持久特性实现方式redo log 一致特性 面试题MySQL的ACID特性分别是怎么实现的&#xff1…

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…

React 中实现拖拽功能-插件 react-beautiful-dnd

拖拽功能在平时开发中是很常见的&#xff0c;这篇文章主要使用react-beautiful-dnd插件实现此功能。 非常好用&#xff0c;附上GitHub地址&#xff1a;https://github.com/atlassian/react-beautiful-dnd 安装及引入 // 1.引入 # yarn yarn add react-beautiful-dnd# npm npm…

在java中获取excel的cell值的时候报错

在获取cell的时候&#xff0c;通常会有报错类型不匹配的问题&#xff0c;这是因为你的cell中存储的数据类型和使用的方法不匹配的原因&#xff0c;假如说cell中存储了一个数字&#xff0c;但是使用的cell.getStringCellValue()获取值&#xff0c;就会有如下错误 java.lang.Ill…

LabVIEW智能温度直流模件自动测试系统

LabVIEW智能温度直流模件自动测试系统 自动化测试系统在提高测试效率和准确性方面发挥着越来越重要的作用。介绍了一种基于LabVIEW的智能温度直流模件&#xff08;TDCA&#xff09;自动测试系统的设计与实施&#xff0c;旨在提高测控装置的产品质量。 系统的硬件平台主要由PS…

Facebook群控:利用IP代理提高聊单效率

在当今社交媒体竞争激烈的环境中&#xff0c;Facebook已经成为广告营销和推广的重要平台&#xff0c;为了更好地利用Facebook进行推广活动&#xff0c;群控技术应运而生。 本文将深入探讨Facebook群控的定义、作用以及如何利用IP代理来提升群控效率&#xff0c;为你提供全面的…

13.从桥接模式细品人生的几座桥

“物理学不存在了&#xff0c;今后也不会存在。”——《三体》 在《三体》中&#xff0c;有这样一个桥段&#xff0c;顶级的物理学家杨冬在三体文明超级计算机“智子”的干扰和误导下&#xff0c;得出了物理实验的结果在实验之前就会被某种力量确定的结论&#xff0c;导致自己…

【Spring】代理模式

文章目录 代理模式对代理模式的理解静态代理动态代理JDK动态代理原理源码优化 CGLIB动态代理使用原理 JDK与CGLIB的对比 面试题JDK动态代理和CGLIB有什么区别&#xff1f;既然有没有接口都可以用CGLIB&#xff0c;为什么Spring还要使用JDK动态代理&#xff1f; 代理模式 对代理…

数据库管理phpmyadmin

子任务1-PHPmyadmin软件的使用 本子任务讲解phpmyadmin的介绍和使用操作。 训练目标 1、掌握PHPmyadmin软件的使用方法。 步骤1 phpMyAdmin 介绍 phpmyadmin是一个用PHP编写的软件工具&#xff0c;可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin可以完全对数据库进行…

目标检测:2如何生成自己的数据集

目录 1. 数据采集 2. 图像标注 3. 开源已标记数据集 4. 数据集划分 参考&#xff1a; 1. 数据采集 数据采集是深度学习和人工智能任务中至关重要的一步&#xff0c;它为模型提供了必要的训练样本和测试数据。在实际应用中&#xff0c;数据采集的方法多种多样&#xff0c;每…

Linux网络通信——TCP/OSI七层模型/TCP/IP(五层或四层模型)/HTTP报文传输原理

文章目录 消息的传输什么是OSI七层模型OSI七层模型的内容物理层&#xff08;Physical Layer&#xff09;&#xff1a;数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;网络层&#xff08;Network Layer&#xff09;&#xff1a;传输层&#xff08;Transport Lay…

Docker基础与持续集成

docker 基础知识&#xff1a; docker与虚拟机 !左边为虚拟机&#xff0c;右边为docker环境 – Server :物理机服务器Host OS &#xff1a;构建的操作系统Hypervisor &#xff1a;一种虚拟机软件&#xff0c;装了之后才能虚拟化操作系统Guest OS &#xff1a;虚拟化的操作系统…