算法|牛客网华为机试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; // 初始为1for(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]);elsedp[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){//起始元素为1int k = 1;//遍历每一行for(int i = 1; i <= n; i++){ //输出每行首cout << k << " ";  int temp = k;//遍历本行的数 从加2开始每个数相加多1for(int j = i + 1; j <= n; j++){ //每个数相差为jtemp += 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++){ //遍历字符串keykey[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遍历到Zauto 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; //需要在转出来的大写字母基础上加32elseoutput += 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;}// 减去第一次落地的*2lenght -= 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;
}

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

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

相关文章

C/C++ 随机数生成方法

1. 使用 rand() 和 srand() - 库: <stdlib.h> 或 <cstdlib> - 特点: 伪随机数生成器&#xff0c;简单易用。 - 示例: #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); // 初始化随机数生成器 int random_nu…

AI大模型重塑软件开发:从代码自动生成到智能测试

随着AI技术的不断发展&#xff0c;AI大模型在软件开发领域的应用日益广泛。从代码自动生成到智能测试&#xff0c;AI大模型正在深刻改变着软件开发的各个环节&#xff0c;重塑着整个开发流程。本文将探讨AI大模型的定义、应用场景、优势以及挑战&#xff0c;并展望未来的发展趋…

Java的内部类

Java内部类 什么是内部类&#xff1f; 类的五大成员&#xff1a;属性、方法、构造方法、代码块、内部类在一个类的里面&#xff0c;再定义一个类 public class Outer { // 外部类class Inner { // 内部类} }public class Test { // 外部其他类public static void main(Strin…

WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)

文章目录 1、案例效果1、侧边栏分类2、CD类侧边弹窗实现1、样式代码实现2、功能代码实现3 运行效果4、源代码获取1、案例效果 1、侧边栏分类 A类 :左侧弹出侧边栏B类 :右侧弹出侧边栏C类 :顶部弹出侧边栏D类 :底部弹出侧边栏2、CD类侧边弹窗实现 1、样式代码实现 在原有的…

字符串算法

字符串 1.kmp匹配算法Anya and 1100 1.kmp匹配算法 模板题链接 不懂可以看这个~详细的思路 #include <string> #include <iostream>using namespace std; const int N 1000010;string s,p;// s[]是长文本&#xff0c;p[]是模式串&#xff0c;n是s的长度&#xff…

掌控板micropython编程实现OLED显示天气信息

掌控板micropython编程实现OLED显示天气信息 上一个例子已经实现了在掌控板的OLED上显示汉字&#xff0c;本例使用掌控板的wifi访问心知天气&#xff0c;获取天气信息显示在掌控板的OLED上。 访问心知天气主页&#xff08; https://www.seniverse.com/&#xff09;&#xff0…

golang通用后台管理系统03(登录校验,并生成token)

代码 package serviceimport ("fmt"//"fmt""gin/common""gin/config"sysEntity "gin/system/entity"sysUtil "gin/system/util""github.com/gin-gonic/gin""log" )func Login(c *gin.Contex…

三维测量与建模笔记 - 2.2 射影几何

教程中H矩阵写的有问题&#xff0c;上图中H矩阵应该是&#xff08;n1) x (m1) 共点不变性,下图中黄色方块标记的点&#xff0c;在射影变换前后&#xff0c;虽然直线的形状有所变化&#xff0c;但仍然相交于同一个点。 共线不变性&#xff0c;下图黄色标记的两个点&#xff0c;在…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释&#xff1a; 代码框架&#xff1a; 要求&#xff1a; 禁用中断的好处与问题&#xff1a; 2. Test and Set Lock (…

系统架构设计师-未来信息综合技术(1)

目录 一、信息物理系统CPS 1、CPS体系结构 2、CPS的技术体系 3、CPS的应用场景 二、人工智能技术 1、人工智能关键技术 2、人工智能&#xff08;AI&#xff09;芯片 一、信息物理系统CPS 定义&#xff1a;CPS通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术&a…

支持向量机背后的数学奥秘

一、基本概念与原理 1.1 支持向量机的定义 支持向量机是一种二分类模型&#xff0c;其核心思想是在样本空间中寻找一个超平面&#xff0c;将不同类别的样本分开。这个超平面被称为决策边界或分隔超平面。支持向量是距离决策边界最近的点&#xff0c;这些点决定了决策边界的位…

LeetCode 热题100 之 回溯1

1.全排列 思路分析1&#xff08;回溯&#xff09;&#xff1a;要生成一个不含重复数字的数组 nums 的所有可能全排列&#xff0c;我们可以使用回溯算法。这种算法通过递归的方法探索所有可能的排列组合&#xff0c;并在合适的时机进行回溯&#xff0c;确保不会遗漏任何排列。回…

「C/C++」C/C++ 之 变量作用域详解

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

深度学习-如何计算神经网络的输出?

给定一个包含输入层、隐藏层和输出层的神经网络架构&#xff0c;可以逐层推导出各节点的输出值。具体步骤如下&#xff1a; 输入层计算&#xff1a; 输入层有 3 个节点&#xff0c;编号为 1、2、3&#xff0c;输入向量为 x_1, x_2, x_3 。输入层节点的输出值直接就是输入向量&a…

【ESP32】ESP-IDF开发 | I2C从机接收i2c_slave_receive函数的BUG导致程序崩溃解决(idf-v5.3.1版本)

1. 问题 在调试I2C外设的demo时&#xff0c;按照官方文档的描述调用相关API&#xff0c;烧录程序后发现程序会不断崩溃&#xff0c;系统log如下。 初步分析log&#xff0c;原因是访问到了不存在的地址。一开始我以为是自己的代码问题&#xff0c;反反复复改了几次都会出现同样的…

vue3学习记录-nextTick

vue3学习记录-nextTick 1. 案例场景2. 使用方法2.1 回调方式2.2 async&#xff0c;await 3.原理 1. 案例场景 聊天框实现输入内容&#xff0c;滚动条默认滚到最底部。 <template><div class"chat_box"><div class"chat_list" ref"chat…

microsoft defender smartscreen怎么关闭

打开windows安全中心 点击基于声誉的保护设置 把检查应用和文件等开关关掉即可

【c++日常刷题】两个数字的交集、点击消除、最小花费爬楼梯

两个数字的交集⭐ 两个数组的交集_牛客题霸_牛客网 (nowcoder.com) 题目描述&#xff1a; 解题思路&#xff1a; 通过遍历num1&#xff0c;如果遍历到的元素如果在num2中能找到&#xff0c;则这是num1和num2的公告元素&#xff1b; 这里需要借助两个数组来实现&#xff1a;…

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)

大会官网&#xff1a;www.icadi.net (CVA为ICADI分会&#xff0c;网站沿用主会议&#xff1b;议程、出版将以主会为准&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 终轮截稿&#xff1a;2024年11月22号&#xff08;特殊情况联系会…

Leetcode—3216. 交换后字典序最小的字符串【简单】

2024每日刷题&#xff08;196&#xff09; Leetcode—3216. 交换后字典序最小的字符串 实现代码 class Solution { public:int flagodd_even(int num) {if(num % 2) {// 奇数return 1;} else {// 偶数return 0;}}string getSmallestString(string s) {int n s.length();int …