算法|牛客网华为机试31-40C++

牛客网华为机试
上篇:算法|牛客网华为机试21-30C++

文章目录

  • HJ31 单词倒排
  • HJ32 密码截取
  • HJ33 整数与IP地址间的转换
  • HJ34 图片整理
  • HJ35 蛇形矩阵
  • HJ36 字符串加密
  • HJ37 统计每个月兔子的总数
  • HJ38 求小球落地5次后所经历的路程和第5次反弹的高度
  • HJ39 判断两个IP是否属于同一子网
  • HJ40 统计字符

HJ31 单词倒排

题目描述:
在这里插入图片描述

解题思路:
for循环遍历一次,从后往前,如果是字符组成单词等遇到空格或者非字母输出。
解法:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str);
    string s = "";
    for(int i = str.size()-1;i>=0;--i){ 
    	// 如果是字母组单词
        if((str.at(i)>='a' && str.at(i) <= 'z')
        || (str.at(i)>='A' && str.at(i) <= 'Z'))
            s = str.at(i)+s;
        // 如果不是字母加空格
        else
        {
            cout<<s<<" ";
            s = "";
        }
    }
    // 输出最后一个单词
    cout<<s<<" ";
    return 0;
}

HJ32 密码截取

题目描述:
在这里插入图片描述

解题思路:
题解 | #密码截取#
解法:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    string s;
    while (cin>>s) {
        int n = s.length();
        vector<vector<bool>> dp(n,vector<bool>(n,false)); // dp[j][i]=1表示从j到i是回文子串
        int maxlen = 1; // 初始为1
        for(int i=0;i<n;++i){
            for(int j=0;j<=i;++j){
                if(i == j) // 奇数长度子串
                    dp[j][i] = true;
                else if (i-j == 1)  // 偶数长度子串
                    dp[j][i] = (s[i] == s[j]);
                else
                    dp[j][i] = (s[i] == s[j] && dp[j+1][i-1]);  // 这两个字符相等 同事中间缩也要相等
                if(dp[j][i]&& i-j+1>maxlen) // 取最大
                    maxlen = i-j+1;
            }
        }
        cout<<maxlen<<endl;
    }
    return 0;
}

HJ33 整数与IP地址间的转换

题目描述:
在这里插入图片描述

解题思路:
使用位运算符。
解法:

#include <iostream>
using namespace std;

int main()
{
    long long int a,b,c,d;
    long long int num;
    // 使用scanf函数从标准输入读取四个整数,这些整数由点.分隔,代表IPv4地址的四个部分。
    // EOF是文件结束标志,当输入结束时返回EOF,循环结束。
    while(scanf("%lld.%lld.%lld.%lld",&a,&b,&c,&d)!=EOF){
        cin>>num;
        // 将a左移24位,b左移16位,c左移8位,然后将它们与d相加,得到IPv4地址的整数形式,并输出。
        // <<是位左移运算符,将一个数的二进制表示向左移动指定位数,右边补0。
        // 例如,a<<24将a的二进制表示向左移动24位,相当于将a乘以2^24。
        cout<<(a<<24)+(b<<16)+(c<<8)+d<<endl;
        // 将整数num右移24位,得到最左边的8位,即IPv4地址的第一个部分,并赋值给a。
        // >>是位右移运算符,将一个数的二进制表示向右移动指定位数,左边补符号位(正数补0,负数补1)。
        // 这里由于num是无符号整数,所以左边补0。
        a = num>>24;
        // 从num中减去a左移24位的结果,移除num中最高的8位,更新num的值。
        num = num-(a<<24);
        // 将更新后的num右移16位,得到接下来的8位,即IPv4地址的第二个部分,并赋值给b。
        b = num>>16;
        // 从num中减去b左移16位的结果,移除num中接下来的8位,更新num的值。
        num = num-(b<<16);
        // 将更新后的num右移8位,得到接下来的8位,即IPv4地址的第三个部分,并赋值给c。
        c = num>>8;
        // 从num中减去c左移8位的结果,移除num中接下来的8位,得到最低的8位,
        // 即IPv4地址的第四个部分,并赋值给d。
        d = num-(c<<8);
        // 输出转换后的IPv4地址。
        cout<<a<<"."<<b<<"."<<c<<"."<<d<<endl;
    }
}

HJ34 图片整理

题目描述:
在这里插入图片描述

解题思路:
C++|sort函数
直接用sort函数就是按着ASCII码从小到大排序的。
在这里插入图片描述

解法:

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    string str;
    cin>>str;
    sort(str.begin(), str.end());
    cout<<str;
    return 0;
}

HJ35 蛇形矩阵

题目描述:
在这里插入图片描述

解题思路:
找每行每列的相加差1的数学规律,再每行输出。
解法:

#include<iostream>
#include<vector>
using namespace std;

int main(){
    int n; 
    while(cin >> n){
        //起始元素为1
        int k = 1;
        //遍历每一行
        for(int i = 1; i <= n; i++){ 
            //输出每行首
            cout << k << " ";  
            int temp = k;
            //遍历本行的数 从加2开始每个数相加多1
            for(int j = i + 1; j <= n; j++){ 
                //每个数相差为j
                temp += j; 
                cout << temp << " ";
            }
            cout << endl;
            //下一行的首为这行首加上这行行号每行行首也是从1开始多加1个
            k += i; 
        }
    }
    return 0;
}

HJ36 字符串加密

题目描述:
在这里插入图片描述

解题思路:
暴力解。
解法:

#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    string key, words;
    while(cin >> key >> words){
        vector<char> v;
        for(int i = 0; i < key.length(); i++){ //遍历字符串key
            key[i] = toupper(key[i]); //全部转大写
            auto it = find(v.begin(), v.end(), key[i]); //查找是否加入过了
            if(it == v.end()) //非重复加入
                v.push_back(key[i]);
        }
        for(char c = 'A'; c <= 'Z'; c++){ //从A遍历到Z
            auto it = find(v.begin(), v.end(), c); //没有出现过
            if(it == v.end()) 
                v.push_back(c); //才加入
        }
        string output = "";
        for(int i = 0; i < words.length(); i++){ //遍历要加密的字符串
            if(islower(words[i])) //遇到小写字符
                output += v[words[i] - 'a'] + 32; //需要在转出来的大写字母基础上加32
            else
                output += v[words[i] - 'A']; //大写字母直接替换
        }
        cout << output << endl;
    }
    return 0;
}

HJ37 统计每个月兔子的总数

题目描述:
在这里插入图片描述

解题思路:
C++|斐波那契数列
解法:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int num;
    cin >> num;
    if (num < 3) {
        cout << 1;
        return 0;
    }
    
    // 初始化数组,存储每个月的兔子对数
    vector<int> rabbits(num + 1, 0);
    rabbits[1] = 1; // 第一个月有1对兔子
    rabbits[2] = 1; // 第二个月有1对兔子

    // 计算每个月的兔子对数
    for (int i = 3; i <= num; ++i) {
        // 每个月的兔子对数是前两个月兔子对数的和
        rabbits[i] = rabbits[i - 1] + rabbits[i - 2];
    }

    cout << rabbits[num];
    return 0;
}

HJ38 求小球落地5次后所经历的路程和第5次反弹的高度

题目描述:
在这里插入图片描述
解题思路:
计算第5次落地后球经过的距离,除了第一次只经过一次,所以距离最后在减去初始长度,高度每次减去一半。
解法:

#include <iostream>
using namespace std;

int main() {
    double height;
    cin>>height;
    double lenght = 0,h = height;
    for (int i=0; i<5; ++i) {
        // 回弹上下路径一样
        lenght += h*2;
        h =  h/2;
    }
    // 减去第一次落地的*2
    lenght -= height;
    cout<<lenght<<endl<<h;
    return 0;
}

HJ39 判断两个IP是否属于同一子网

题目描述:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路:
题解 | #判断两个IP是否属于同一子网#
解法:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // 子网掩码
    vector<int> mask(4,0);
    // ip地址
    vector<int> ip1(4,0);
    vector<int> ip2(4,0);
    char c;
    while (cin>>mask[0]>>c>>mask[1]>>c>>mask[2]>>c>>mask[3])//输入掩码
    {
        int flag = -1;//结果
        cin>>ip1[0]>>c>>ip1[1]>>c>>ip1[2]>>c>>ip1[3];//第一个ip地址
        cin>>ip2[0]>>c>>ip2[1]>>c>>ip2[2]>>c>>ip2[3];//第二个ip地址
        for(int i=0;i<4;i++)//两个ip地址和掩码每一段都要在0-255之间
        {
            if(mask[i]<0 || mask[i]>255 || ip1[i]<0 || ip1[i]>255 ||ip2[i]<0 || ip2[i]>255)
            {
                flag = 1;//格式非法
                break;
            }
        }
        for(int i=0;i<3;i++)//掩码的网络号全为1,主机号全为0
        {
            if(mask[i]<255 && mask[i+1]>0)
            {
                flag = 1;
                break;
            }
        }
        if(flag==1)//格式非法,输出1
        {
            cout<<flag<<endl;
        }else{
            for(int i=0;i<4;i++)
            {
                if((mask[i]&ip1[i])!=(mask[i]&ip2[i]))//两个ip地址和掩码做AND操作
                {
                    flag = 2;
                    break;
                }else{//AND操作结果不相同
                    flag = 0;
                }
            }
            cout<<flag<<endl;
        }
    }
    return 0;
}

HJ40 统计字符

题目描述:
在这里插入图片描述

解题思路:
暴力解。
解法:

#include <iostream>
using namespace std;

int main() {
    string str;
    getline(cin,str);
    int english_char = 0,space_char = 0,num = 0,others = 0;
    for(auto c:str){
        if(c>='a'&&c<='z'){
            english_char++;
        }
        else if(c == ' '){
            space_char++;
        }
        else if(c>='0'&&c<='9'){
            num++;
        }
        else{
            others++;
        }
    }
    cout<<english_char<<endl<<space_char<<endl<<num<<endl<<others<<endl;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第六十三周周报 GCN-CNNGA

文章目录 week 63 GCN-CNNGA摘要Abstract1. 题目2. Abstract3. 文献解读3.1 Introduction3.2 创新点 4. 网络结构4.1 数据分析4.2 混合深度学习框架的发展4.3 Mul4.4 CNN block4.5 GCN block4.6 GRU block4.7 注意力机制4.8 模型评估标准 5. 实验结果5.1 不同邻接矩阵的性能评价…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线&#xff0c;以数据表格形式呈现&#xff0c;并附带在教育行…

「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用

在鸿蒙应用开发中&#xff0c;Canvas 组件不仅用于基础绘图&#xff0c;还提供了处理复杂路径和渐变效果的多种手段&#xff0c;帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。 关键词 Canvas 组件复杂路径绘制渐变填充 一、Canv…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可&#xff0c;无特殊要求 PyCharm 2023.3.5&#xff08;下最新版本即可&#xff0c;无特殊要求&#xff09; 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

鸿蒙进阶篇-网格布局 Grid/GridItem(二)

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天让我们来继续学习鸿蒙进阶篇-网格布局 Grid/GridItem&#xff0c;上一篇博文我们已经学习了固定行列、合并行列和设置滚动&#xff0c;这一篇我们将继续学习Grid的用法&#xff0c;实现翻页滚动、自定义滚动条样式&…

【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性

0.最大的问题 - 散热 对变压器这类功率器件&#xff0c;最大的问题是散热的效率。因为传统的电路基板热导率并不高&#xff0c;几乎和良性导热材料有近乎两个数量级的导热差异&#xff0c;所以&#xff0c;会采用特殊的导热技术&#xff0c;把热量尽可能快地传导到散热片。 传…

MATLAB中eig函数用法

目录 语法 说明 示例 矩阵特征值 矩阵的特征值和特征向量 排序的特征值和特征向量 左特征向量 不可对角化&#xff08;亏损&#xff09;矩阵的特征值 广义特征值 病态矩阵使用 QZ 算法得出广义特征值 一个矩阵为奇异矩阵的广义特征值 eig函数的功能是求取矩阵特征值…

深入理解单位根:如何通过单位根检验分析序列的平稳性

在时间序列分析中&#xff0c;平稳性是至关重要的概念。大多数时间序列模型&#xff08;如 ARMA 模型&#xff09;都假设序列是平稳的&#xff0c;即其统计特性&#xff08;均值、方差、自相关性&#xff09;不随时间变化。然而&#xff0c;许多实际数据并不满足这一条件&#…

书生大模型第三关Git 基础知识

关卡编号&#xff1a;L0G3000 任务一 破冰行动 fork仓库&#xff0c;注意这里不要勾选Copy branch Only!!!&#xff0c;因为后面课程中会使用到class分支&#xff1a; 克隆仓库&#xff1a; 移动分支&#xff1a; 创建自己的分支&#xff1a; 创建id.md文档&#xff0c;…

由中文乱码引来的一系列学习——Qt

前言 解决中文引起的乱码&#xff0c;并不难&#xff0c;网上一搜就有好几个方法任君选择&#xff0c;但是解决乱码的这些方法的原理是什么&#xff0c;我一直没太明白。 这次项目需要在Android环境下运行&#xff0c;而根据Qt跨平台的特性&#xff0c;我一般是在Windows环境…

python基础——05函数

一、函数 1.1 函数定义 函数定义&#xff1a;实现特定功能的代码块 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改可提高代码的可拓展性 函数三要素&#xff1a;功能、参数、返回值 函数定义的语法格式&#xff1a; 函数分类&#xff1a; 从定义的角度—…

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器)

1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式&#xff08;单次和连续&#xff09; 4.ADC的扫描模式的转换模式&#xff08;单次和连续&#xff09; 5.采集校准 代码实验&#xff1a;

GaussDB的向量化处理技术

本文将深入探讨GaussDB中的向量化处理技术&#xff0c;涵盖其常见特性和实际应用。先详细介绍存储数据和即时数据&#xff08;正在处理的数据&#xff09;的按列组织格式&#xff0c;并阐述其优势。后通过分析SIMD&#xff08;单指令多数据流&#xff09;处理技术的一般原理&am…

JavaScript猜数游戏小游戏

1.由系统生成一个1-100的随机整数。 2.提示用户输入一个1-100的整数&#xff0c;并将用户输入的数转换为整数。 3.将用户输入的数与随机生成的数进行比较&#xff0c;如果相等提示猜对了&#xff1b;否则给出提示&#xff0c;帮询问用户是否继续游戏。 4.如果用户在提示框中…

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发&#xff1a;指异步代码在执行到一定程度后会被…

C++builder中的人工智能(12):了解ELU(Exponential Linear Unit)——人工神经网络中的激活函数

在这篇文章中&#xff0c;我们将解释什么是指数线性单元&#xff08;ELU&#xff09;&#xff0c;以及如何利用ELU激活函数。通过学习这些知识&#xff0c;你将能够使用C软件创建C应用程序。 我们需要了解哪些关于激活函数的知识&#xff1f; 激活函数&#xff08;phi()&#…

Spark中的宽窄依赖-宽窄巷子

1、什么是依赖关系&#xff1f; 2、什么是宽窄依赖&#xff1f; 窄依赖&#xff1a;Narrow Dependencies 定义&#xff1a;父RDD的一个分区的数据只给了子RDD的一个分区 【不用经过Shuffle】 特点&#xff1a;一对一或者多对一&#xff0c;不经过Shuffle&#xff0c;性能相对…

Scrapy入门

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 安装scrapy pip install scrapy2.5.0 1.新建 Scrapy项目 scrapy startproject mySpider # 项目名为mySpider 2.进入到spiders目录 cd mySpider/mySpider/spiders 3.创建爬虫 scrapy gensp…

C++ 继承:代码传承的魔法棒,开启奇幻编程之旅

文章目录 一.继承的概念及定义1.1继承的概念1.2继承类1.2.1继承方法 1.3继承模板 二.基类和派生类的转换三.继承中的作用域四.派生类的默认成员函数4.1默认成员函数的行为4.2实现一个无法被继承的类 五.继承与友元六.继承与静态成员七.多继承和菱形继承7.1多继承和菱形继承7.2虚…