算法学习——华为机考题库2(HJ11 - HJ20)

算法学习——华为机考题库2(HJ11 - HJ20)

HJ11 数字颠倒

描述

输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

数据范围: 0≤n≤2 30 −1
输入描述:
输入一个int整数

输出描述:
将这个整数以字符串的形式逆序输出

示例

在这里插入图片描述

代码解析

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;int main() {int num;cin>>num;string myStr = to_string(num);reverse(myStr.begin() , myStr.end());cout<<myStr;
}
// 64 位输出请用 printf("%lld")

HJ12 字符串反转

描述

接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

输入描述:
输入一行,为一个只包含小写字母的字符串。

输出描述:
输出该字符串反转后的字符串。

示例

在这里插入图片描述

代码解析

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;int main() {string Str;cin>>Str;reverse(Str.begin(), Str.end());cout<<Str;
}
// 64 位输出请用 printf("%lld")

HJ13 句子逆序

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

**数据范围:**输入的字符串长度满足 1≤n≤1000

注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述:
得到逆序的句子

示例

在这里插入图片描述

代码解析

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;int main() {string myStr;getline(cin, myStr);reverse(myStr.begin(), myStr.end());// cout<<myStr<<endl;int left = 0 , right = 0;for(int right = 0 ; right < myStr.size() ; right++){if(myStr[right] == ' ' ){reverse(myStr.begin() + left, myStr.begin() + right);left = right + 1;}if(right == myStr.size()-1){reverse(myStr.begin() + left, myStr.begin() + right + 1);}}cout<<myStr;
}
// 64 位输出请用 printf("%lld")

HJ14 字符串排序

描述

给定 n 个字符串,请对 n 个字符串按照字典序排列。

数据范围: 1≤n≤1000 ,字符串长度满足 1≤len≤100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。

示例

在这里插入图片描述

代码解析

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;static bool cmp(string &s1 , string &s2)
{   return s1 < s2;
}int main() {int N;cin>>N;vector<string> myVec;string tmp;while(N--){cin>>tmp;myVec.push_back(tmp);}sort(myVec.begin(), myVec.end(), cmp);for(int i = 0 ; i < myVec.size(); i++){cout<< myVec[i]<<endl;}}
// 64 位输出请用 printf("%lld")

HJ15 求int型正整数在内存中存储时1的个数

描述

输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

**数据范围:**保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)

输出描述:
这个数转换成2进制后,输出1的个数

示例

在这里插入图片描述

代码解析

#include <iostream>
using namespace std;int main() {int num , result = 0;cin>>num;for(int i=0 ; i < 32 ; i++){if((num&0x01 ) == 1 ) result++;num = num>>1;}cout<<result;
}
// 64 位输出请用 printf("%lld")

HJ16 购物单

描述

王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:
在这里插入图片描述
在这里插入图片描述
输入描述:
输入的第 1 行,为两个正整数N,m,用一个空格隔开:

(其中 N ( N<32000 )表示总钱数, m (m <60 )为可购买的物品的个数。)

从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q

(其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1 ~ 5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号)

输出描述:
输出一个正整数,为张强可以获得的最大的满意度。

示例

在这里插入图片描述

代码解析

#include<iostream>
#include<vector>
using namespace std;
int main(){int M,N;cin>>M>>N;M/=10;vector<vector<int>> price(N+1,vector<int>(3,0));vector<vector<int>> value(N+1,vector<int>(3,0));for(int i=1;i<=N;i++){int a,b,c;cin>>a>>b>>c;if(c==0){price[i][0]=a/10;value[i][0]=b;}else{if(price[c][1]!=0){price[c][2]=a/10;value[c][2]=b;}else{price[c][1]=a/10;value[c][1]=b;}}}vector<vector<int>> dp(N+1,vector<int>(M+1,0));for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){int a=price[i][0],b=value[i][0];int c=price[i][1],d=value[i][1];int e=price[i][2],f=value[i][2];dp[i][j]=j>=a?max(dp[i-1][j-a]+a*b,dp[i-1][j]):dp[i-1][j];dp[i][j]=j>=a+c?max(dp[i-1][j-a-c]+a*b+c*d,dp[i][j]):dp[i][j];dp[i][j]=j>=a+e?max(dp[i-1][j-a-e]+a*b+e*f,dp[i][j]):dp[i][j];dp[i][j]=j>=a+c+e?max(dp[i-1][j-a-e-c]+a*b+c*d+e*f,dp[i][j]):dp[i][j];}}cout<<dp[N][M]*10<<endl;return 0;
}

HJ17 坐标移动

描述

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10; A1A; % ; YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

  • A10 = (-10,0)

  • S20 = (-10,-20)

  • W10 = (-10,-10)

  • D30 = (20,-10)

  • x = 无效

  • A1A = 无效

  • B10A11 = 无效

  • 一个空 不影响

  • A10 = (10,-10)

结果 (10, -10)

数据范围: 每组输入的字符串长度满足 1≤n≤10000 ,坐标保证满足 −2 31 ≤x,y≤2 31 −1 ,且数字部分仅含正数
输入描述:
一行字符串

输出描述:
最终坐标,以逗号分隔

示例

在这里插入图片描述

代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;int main() {string myStr;vector<string> date;cin>>myStr;int x =0 , y = 0;string tmp ;for(int i=0 ; i<myStr.size() ;i++){if(myStr[i] == ';'){date.push_back(tmp);tmp.clear();}else tmp += myStr[i];}char dir;int lenght = 0;for(int i=0 ; i<date.size() ;i++){dir = date[i][0];if(dir == 'A' ||dir == 'D' ||dir == 'W' ||dir == 'S'){tmp = date[i].substr(1,date[i].size() -1);bool flag = true;for(int x=0 ; x<tmp.size() ; x++ )  {if( tmp[x] >= '0' && tmp[x] <= '9')  {}else{flag = false;break;}}if(flag == true){lenght = stoi(tmp);// cout<<dir<<lenght<<endl;if(dir == 'A') x -= lenght;else if(dir == 'D') x += lenght;else if(dir == 'W') y += lenght;else if(dir == 'S') y -= lenght;} }}cout<<x<<','<<y;
}
// 64 位输出请用 printf("%lld")

HJ18 识别有效的IP地址和掩码并进行分类统计

描述

请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。

所有的IP地址划分为 A,B,C,D,E五类

A类地址从1.0.0.0到126.255.255.255;

B类地址从128.0.0.0到191.255.255.255;

C类地址从192.0.0.0到223.255.255.255;

D类地址从224.0.0.0到239.255.255.255;

E类地址从240.0.0.0到255.255.255.255

私网IP范围是:

从10.0.0.0到10.255.255.255

从172.16.0.0到172.31.255.255

从192.168.0.0到192.168.255.255

子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
(注意二进制下全是1或者全是0均为非法子网掩码)

注意:

  1. 类似于【0...】和【127...】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略
  2. 私有IP地址和A,B,C,D,E类地址是不冲突的

输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。

请参考帖子https://www.nowcoder.com/discuss/276处理循环输入的问题。
输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。

示例

在这里插入图片描述

代码解析

#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;bool judge_ip(string ip){int j = 0;istringstream iss(ip);string seg;while(getline(iss,seg,'.'))if(++j > 4 || seg.empty() || stoi(seg) > 255)return false;return j == 4;
}bool is_private(string ip){istringstream iss(ip);string seg;vector<int> v;while(getline(iss,seg,'.')) v.push_back(stoi(seg));if(v[0] == 10) return true;if(v[0] == 172 && (v[1] >= 16 && v[1] <= 31)) return true;if(v[0] == 192 && v[1] == 168) return true;return false;
}bool is_mask(string ip){istringstream iss(ip);string seg;unsigned b = 0;while(getline(iss,seg,'.')) b = (b << 8) + stoi(seg);if(!b) return false;b = ~b + 1;if(b == 1) return false;if((b & (b-1)) == 0) return true;return false;
}int main(){string input;int a = 0,b = 0,c = 0,d = 0,e = 0,err = 0,p = 0;while(cin >> input){istringstream is(input);string add;vector<string> v;while(getline(is,add,'~')) v.push_back(add);if(!judge_ip(v[1]) || !is_mask(v[1])) err++;else{if(!judge_ip(v[0])) err++;else{int first = stoi(v[0].substr(0,v[0].find_first_of('.')));if(is_private(v[0])) p++;if(first > 0 && first <127) a++;else if(first > 127 && first <192) b++;else if(first > 191 && first <224) c++;else if(first > 223 && first <240) d++;else if(first > 239 && first <256) e++;}}}cout << a << " " << b << " " << c << " " << d << " " << e << " " << err << " " << p << endl;return 0;
}

HJ19 简单错误记录

描述

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。

处理:

1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16位)和行号完全匹配的记录才做算是“相同”的错误记录。
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。也就是说,哪怕不同路径下的文件,如果它们的名字的后16个字符相同,也被视为相同的错误记录
4、循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准

**数据范围:**错误记录数量满足 1≤n≤100 ,每条记录长度满足 1≤len≤100
输入描述:
每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:

示例

在这里插入图片描述

代码解析

#include <algorithm>
#include <deque>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <vector>
using namespace std;int main() {vector<pair<string , int>> date;string tmpName;int num;while (cin >> tmpName >> num) { deque<char> tmDeq;for(int i=tmpName.size()-1 ; i > 0    ; i--){if(tmpName[i] == '\\' ||tmpName.size() - i > 16 ) break;tmDeq.push_front(tmpName[i]);}tmpName.assign(tmDeq.begin(), tmDeq.end());tmpName += ' ';tmpName += to_string(num) ;// cout<<"tmpName "<<tmpName<<endl;bool flag = false;for(int i=0 ; i <date.size() ; i++){if(date[i].first == tmpName){date[i].second++;flag = true;} }if(flag == false) date.push_back({tmpName , 1});}if(date.size() > 8){ for(int i=date.size()-8 ; i<date.size() ; i++)cout<<date[i].first << ' '<<date[i].second<<endl;}else {for(int i=0 ; i<date.size() ; i++)cout<<date[i].first << ' '<<date[i].second<<endl;}date.clear();
}
// 64 位输出请用 printf("%lld")

HJ20 密码验证合格程序

描述

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)

数据范围:输入的字符串长度满足 1≤n≤100
输入描述:
一组字符串。

输出描述:
如果符合要求输出:OK,否则输出NG

示例

在这里插入图片描述

代码解析

#include <iostream>
#include <string>
using namespace std;string cheak(string &tmp)
{int flag[4] = {0,0,0,0};if(tmp.size() <= 8) return "NG";for(int i=0 ; i <tmp.size() ; i++){if(tmp[i] >= 'A' && tmp[i] <= 'Z') flag[0] = 1;else if(tmp[i] >= 'a' && tmp[i] <= 'z') flag[1] = 1;else if(tmp[i] >= '0' && tmp[i] <= '9') flag[2] = 1;else flag[3] = 1;}int count = 0;for(int i=0 ; i<4 ; i++)if(flag[i] == 1) count++;if(count < 3) return "NG";for(int i=0 ; i<tmp.size() ; i++){for(int j=i+3 ; j<tmp.size() ; j++){if(tmp[i] == tmp[j] && tmp[i+1] == tmp[j+1] && tmp[i+2] == tmp[j+2])return "NG";}}return "OK";
}int main() {string tmp;while (cin >> tmp ){cout << cheak(tmp) << endl;}
}
// 64 位输出请用 printf("%lld")

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

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

相关文章

如何在 Microsoft Azure 上部署和管理 Elastic Stack

作者&#xff1a;来自 Elastic Osman Ishaq Elastic 用户可以从 Azure 门户中查找、部署和管理 Elasticsearch。 此集成提供了简化的入门体验&#xff0c;所有这些都使用你已知的 Azure 门户和工具&#xff0c;因此你可以轻松部署 Elastic&#xff0c;而无需注册外部服务或配置…

JSR303参数校验-SpringMVC

文章目录 JSR303技术标准简介JSR303标准几个具体实现框架validation-apijakarta.validation-apihibernate-validatorspring-boot-starter-validation Spring Validationjavax.validation.constraints包下提供的注解org.hibernate.validator.constraints包扩展的注解校验注解默认…

《QDebug 2024年1月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Repeator 的 delegate 在 remove 移除时的注意事项 Qt Bug Tracker&#xff1a;https://bugreports.qt.io/browse/QTBUG-47500 Repeator 在调用 remove 函数之后&#xff0c;对应的 Item 会立即释放&#xff0c;后续就…

Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询

1概况 本文展示如何使用 Flink CDC Iceberg Doris 构建实时湖仓一体的联邦查询分析&#xff0c;Doris 1.1版本提供了Iceberg的支持&#xff0c;本文主要展示Doris和Iceberg怎么使用&#xff0c;大家按照步骤可以一步步完成。完整体验整个搭建操作的过程。 2系统架构 我们整…

Linux校准时间 Centos

Linux校准时间 Centos 首先&#xff0c;确保系统中已经安装了tzdata包。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo yum install tzdata设置系统时区为上海&#xff1a; sudo timedatectl set-timezone Asia/Shanghai验证时区设置是否生效&#xff1a;…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

Nucleosome, Recombinant Human, H2BK120ub1 dNuc, Biotinylated

EpiCypher&#xff08;国内授权代理商欣博盛生物&#xff09;是一家为表观遗传学和染色质生物学研究提供高质量试剂和工具的专业制造商。EpiCypher生产的在E. coli中表达的重组人单核小体(组蛋白H2A、H2B、H3和H4各2个;accession numbers:H2A-P04908;H2B-O60814;H3.1-P68431;H4…

重写Sylar基于协程的服务器(3、协程模块的设计)

重写Sylar基于协程的服务器&#xff08;3、协程模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

IP风险画像在企业网络安全中应用

随着企业数字化的不断深入&#xff0c;网络安全问题日益突显。IP风险画像作为一种综合性的网络安全工具&#xff0c;为企业提供了更全面的风险评估和防范手段。本文将结合一个实际案例&#xff0c;深入探讨IP风险画像在企业网络安全中的成功应用。 案例背景 一家大型金融机构…

苹果电脑录制视频在哪里?教你快速找到它!

录制电脑屏幕已成为了许多用户日常所需的操作&#xff0c;无论是录制在线课程、游戏过程&#xff0c;还是网络会议&#xff0c;一款好的录屏软件能帮助用户高效、便捷地完成任务。苹果电脑是当今主流的计算机设备之一&#xff0c;可是很多用户不知道苹果电脑录制视频在哪里。在…

LeetCode:283. 移动零

283. 移动零 1&#xff09;题目2&#xff09;代码方法一&#xff1a;两层for循环方法二&#xff1a;使用双指针 3&#xff09;结果方法一结果方法二结果 1&#xff09;题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的…

用GOGS搭建GIT服务器

GOGS官网 Gogs: A painless self-hosted Git service 进入文件所在目录 cd /usr/local/develop 解压文件 tar -xvf gogs_0.13.0_linux_amd64.tar.gz 解压之后 进入gogs 目录 cd gogs 创建几个目录 userdata 存放用户数据 log文件存放进程日志 repositories 仓库根目…

C语言函数递归详解

递归是什么&#xff1f; 递归&#xff0c;顾名思义&#xff0c;就是递推和回归。 递归是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main…

【python】OpenCV—Tracking(10.1)

学习来自《Learning OpenCV 3 Computer Vision with Python》Second Edition by Joe Minichino and Joseph Howse 文章目录 检测移动的目标涉及到的 opencv 库cv2.GaussianBlurcv2.absdiffcv2.thresholdcv2.dilatecv2.getStructuringElementcv2.findContourscv2.contourAreacv2…

React16源码: React中处理hydrate的核心流程源码实现

hydrate 1 &#xff09;概述 hydrate 在react当中不算特别重要, 但是很多时候会用到的一个API这个 API 它主要作用就是在进入第一次渲染的时候&#xff0c;如果本身 dom 树上面已经有一个dom结构存在是否可以去利用这一部分已经存在的dom&#xff0c;然后去避免掉在第一次渲染…

小华和小为的聚餐地点 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 小华和小为是很要好的朋友,他们约定周末一起吃饭。 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达)。 求小华和小为都能到达的聚餐地点有多少个? 输入描述…

在本地运行大型语言模型 (LLM) 的六种方法(2024 年 1 月)

一、说明 &#xff08;开放&#xff09;本地大型语言模型&#xff08;LLM&#xff09;&#xff0c;特别是在 Meta 发布LLaMA和后Llama 2&#xff0c;变得越来越好&#xff0c;并且被越来越广泛地采用。 在本文中&#xff0c;我想演示在本地&#xff08;即在您的计算机上&#x…

最值得推荐收藏的 7 款 Android 系统修复软件,快速的修复手机异常

在当今世界&#xff0c;移动设备是我们生活的重要组成部分。我们将它们用于沟通、工作、娱乐和许多其他目的。然而&#xff0c;随着不断的使用&#xff0c;它们通常会面临速度慢、崩溃等问题。这可能会让人烦恼和沮丧。但是&#xff0c;值得庆幸的是&#xff0c;您可以在 Andro…

【51单片机系列】中断优先级介绍及使用

文章来源&#xff1a;《51单片机原理及应用&#xff08;第3版&#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断&#xff0c;又发生更高级中断时&#xff0c;此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…

零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法

零基础学编程系列&#xff0c;从入门到精通&#xff0c;中文编程开发语言工具下载&#xff0c;编程构件容器件之控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载…