版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华为2023笔试题
1.删除字符串中的指定字符
1.1问题描述
输入两个字符串M和N,从字符串M中删除字符串N中全部的字符。例如,输入”abcda”和”ac”,则删除之后的”第一个字符串变成”bd”。
1.2问题求解
这个比拟简洁,给出如下参考代码:
#include
usingnamespacestd;
voiddeleteCharacter(stringstr0,stringstr1){
for(inti=0;i
if(str1.find(str0[i])!=string::npos){
str0.erase(i,1);
continue;
}
++i;
}
}
2.成绩排名
2.1问题描述
题目总共包含如下两种格式的字符串命令:
LODGRADE命令,其格式:
LODGRADE:NAME=XiaoMing,MATH=80,LANG=90;
(1)此命令用于导入学生成绩
(2)NAME字段表示学生姓名
(3)MATH字段表示学生数学成绩
(4)LANG字段表示语文成绩
(5)MATH字段和LANG字段挨次不肯定MATH在前,LANG在后
(6)一样的分数,名次一样,后面的名次空缺;例如100,99,99,99,98,98,名次:1,2,2,2,5,5
(7)此命令会连续执行,直到遇到第一个LSTGRADE
LSTGRADE命令,其格式:
LSTGRADE:NAME=XiaoMing;
(1)此命令用于查询学生成绩
(2)NAME字段表示学生姓名
(3)查询结果格式:姓名数学语文总分数学排名语文排名总排名
(4)每组用例,此命令仅执行一次
输入:连续多组LODGRADE后跟一个LSTGRADE查询命令
输出:输出查询格式为:
姓名数学语文总分数学排名语文排名总排名
样例输入:LODGRADE:NAME=XiaoMing,MATH=80,LANG=90;
LODGRADE:NAME=XiaoHong,LANG=60,MATH=100;
LODGRADE:NAME=XiaoMei,MATH=70,LANG=90;
LSTGRADE:NAME=XiaoHong;
样例输出:XiaoHong10060160132
2.2问题求解
此问题也不难,没有涉及到简单的算法,就是比拟繁琐,主要考察数据的表示,字符串的提取与排序,下面给出参考代码:
#include
#include
#include
#include
usingnamespacestd;
structStudent{
stringname;
intmath;
intlang;
Student(){
this-name=;
this-math=0;
this-lang=0;
}
Student(stringname,intmath,intlang){
this-name=name;
this-math=math;
this-lang=lang;
}
booloperator==(constStudentele){
returnthis-name==;
}
};
//自定义比拟函数,数学排名
boolcompareMath(constStudentleft,constStudentright){
returnleft.mathright.math;//降序排列
}
//自定义比拟函数,语文排名
boolcompareLang(constStudentleft,constStudentright){
returnleft.langright.lang;//降序排列
}
//自定义比拟函数,总分排名
boolcompareTotal(constStudentleft,constStudentright){
returnleft.math+left.langright.math+right.lang;//降序排列
}
intmain(){
vectorstudentVec;
stringinput;
Studentstudent;
vectorsplitedRes;
while(getline(cin,input)){
ints=input.find(NAME=);
inte=input.find(,,s);
if(input.find(LODGRADE)!=string::npos){//输入成绩
=input.substr(s+5,e-s-5);
s=input.find(MATH=);
e=input.find(,,s);
if(e==string::npos)e=input.length()-1;
student.math=stoi(input.substr(s+5,e-s-5));
s=input.find(LANG=);
e=input.find(,,s);
if(e==string::npos)e=input.length()-1;
student.lang=stoi(input.substr(s+5,e-s-5));
studentVec.push_back(student);
}else{//查询成绩
e=input.length()-1;
stringname=input.substr(s+5,e-s-5);
Studentstudent;
//数学排名
std::sort(studentVec.begin(),studentVec.end(),compareMath);
vector::iteratorit=find(studentVec.begin(),studentVec.end(),Student(name,0,0));
student=*it;
while(it!=studentVec.begin()(it-1)-math==it-math)--it;
intmathRank=it-studentVec.begin()+1;
//语文排名
std::sort(studentVec.begin(),studentVec.end(),compareLang);
it=find(studentVec.begin(),studentVec.end(),Student(name,0,0));
while(it!=studentVec.begin()(it-1)-lang==it-lang)--it;
intlangRank=it-studentVec.begin()+1;
//总分排名
std::sort(studentVec.begin(),studentVec.end(),compareTotal);
it=find(studentVec.begin(),studentVec.end(),Student(name,0,0));
while(it!=studentVec.begin()(it-1)-math+(it-1)-lang==it-math+it-lang)--it;
inttotalRank=it-studentVec.begin()+1;
cout
cout
3.2动态规划法求解
递归法易于理解,但是存在对子问题的重复计算,时间效率低下,可以将子问题的结果存储起来,把递归实现,转换为迭代实现,这样就变成了动态规划。递归法是自顶向下,而动态规划是自底向上递归法是需要某个结果时就调用自己来计算,动态规划把每次递推的结果保存在数组中。由于这里有i,ir,j,jr一个4个变量,所以其实需要一个4维数组,这里用了一个宏代替,将4维数组通过下标转变变为一维数组。详细实现参考如下代码:
intfunc2(conststringa,conststringb){
constintla=(int)a.length();
constintlb=(int)b.length();
vectorret(la*la*lb*lb);
#defineVRET(a,b,c,d)(ret[(a)*la*lb*lb+(b)*lb*lb+(c)*lb+(d)])
for(intix=la-1;ix=0;ix--)
for(intirx=ix;irxla;irx++)
for(intjx=lb-1;jx=0;jx--)
for(intjrx=jx;jrxlb;jrx++){
inti=ix;
intir=irx;
intj=jx;
intjr=jrx;
while(i=irj=jra[i]==b[j]){
i++;
j++;
}
while(i=irj=jra[ir]==b[jr]){
ir--;
jr--;
}
if(iir){//A为空串
VRET(ix,irx,jx,jrx)=(jr+1-j)+2;
continue;
}elseif(jjr){//B为空串
VRET(ix,irx,jx,jrx)=2;
continue;
}
inttmp=2+(jr+1-j)+2;//最坏状况,将A全部删除再增加到B
for(intk=i+1;k=ir;k++)
tmp=min(tmp,2+VRET(k,ir,j,jr));
for(intk=ir-1;k=i;k--)
tmp=min(tmp,2+VRET(i,k,j,jr));
for(intk=j+1;k=jr;k++)
tmp=min(tmp,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年吉县带编教师招聘笔试参考题库及答案解析
- 2026年山西烟草真题试卷及答案
- 2026年辽宁省部编版七年级历史第3课同步练习题
- T/APD 0011-2024大型物件滚装滚卸规范
- 文体写作题及参考答案解析
- 在2026级高一军训会操比赛上的讲话:淬炼迷彩青春奔赴辽阔人生
- 年产30套水泥包装机生产项目可行性研究报告
- 世界着名建筑师之扎哈哈迪德
- 井巷工程第二章巷道交叉口设计与施工
- 《非线性回归模型》课件
- 高中物理课程标准解读及复习备考建议课件
- 糖尿病慢病管理的医防融合模式
- 舞动疗法的动作
- 2025年学校工会工作总结范文(5篇)
- 中国制药工业EHS指南(2025版)-中国医药企业管理协会
- DB32-T 4865-2024 公路水运工程工地试验室仪器设备管理规范
- 煤矿废弃场土地复垦方案报告书
- 《外汇交易原理与实务》(第4版) 教案 刘金波
- 幼儿课件:秋天的认识
- 第一单元 分类与整 理 单元过关试题(含答案)小学数学人教版(2024)二年级上册
- 2025年山东省环保发展集团科创有限公司权属企业招聘(社招校招)笔试参考题库附带答案详解
评论
0/150
提交评论