从网上整理的华为机试题目.docx

上传人:b****2 文档编号:1760296 上传时间:2023-05-01 格式:DOCX 页数:16 大小:20.05KB
下载 相关 举报
从网上整理的华为机试题目.docx_第1页
第1页 / 共16页
从网上整理的华为机试题目.docx_第2页
第2页 / 共16页
从网上整理的华为机试题目.docx_第3页
第3页 / 共16页
从网上整理的华为机试题目.docx_第4页
第4页 / 共16页
从网上整理的华为机试题目.docx_第5页
第5页 / 共16页
从网上整理的华为机试题目.docx_第6页
第6页 / 共16页
从网上整理的华为机试题目.docx_第7页
第7页 / 共16页
从网上整理的华为机试题目.docx_第8页
第8页 / 共16页
从网上整理的华为机试题目.docx_第9页
第9页 / 共16页
从网上整理的华为机试题目.docx_第10页
第10页 / 共16页
从网上整理的华为机试题目.docx_第11页
第11页 / 共16页
从网上整理的华为机试题目.docx_第12页
第12页 / 共16页
从网上整理的华为机试题目.docx_第13页
第13页 / 共16页
从网上整理的华为机试题目.docx_第14页
第14页 / 共16页
从网上整理的华为机试题目.docx_第15页
第15页 / 共16页
从网上整理的华为机试题目.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

从网上整理的华为机试题目.docx

《从网上整理的华为机试题目.docx》由会员分享,可在线阅读,更多相关《从网上整理的华为机试题目.docx(16页珍藏版)》请在冰点文库上搜索。

从网上整理的华为机试题目.docx

从网上整理的华为机试题目

一、华为机试——2018年校招

10号参加的华为的机试,这次的3道题难度适中。

第一题字符串,第二题贪心算法(会不会?

),dp可以解,第三题长整数相乘。

因为题主做过第三题原题,刚开始就把第三题秒了~~

然后开始做第一题,一般10分钟就可以搞定。

第二题要想一下,不过也差不多是原题,Leetcode上第55题jumpgame应该是此题原型。

因为都刷过几乎是原题的原故,一个小时不到3题就AC完了

下面是完整题目和代码

题目一、给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。

举例!

假设原始字符串为

eeefgghhh

则每种字符出现的次数分别是

3次  1次  1次3次

重新排序后输出的字符串如下:

efghegheh

编写程序,实现上述功能。

【温馨提示】

1.原始字符串中仅可能出现“数字”和“字母”;

2.请注意区分字母大小写。

1.#include   

2.#include   

3.#include   

4.#include   

5.using namespace std;  

6.int main(){  

7.    string str;  

8.    int a[128]={0};  

9.    while (cin >> str){  

10.        for(int i=0;i<();i++){  

11.            a[str[i]]++;  

        }                                                    ....位。

我不放心,输出测试一下。

之后就简单了,输出a数组中从小到大第一个值为1的i值即可。

值得注意的是,这种题其实写在一个main函数里就够了,而且这样写也比较好。

毕竟机试不是做项目,不需要模块化,这样修改起来也比较容易。

题目二、

宝宝表示这道题其实不难,就是两个字,复杂。

我的思路大概就是

1.首先判断所给矩形是否相交,不相交直接输出0

2.若相交,将相交面积表示出来,并输出结果

最后发现貌似判断相交的思路会影响相交求面积的思路(正所谓数学题多问,第一问为第二问做铺垫一样)由于我的判相交思路不好影响了第二问,导致这一题我没做出来。

思路大概是求出两个矩形中心坐标,用平行于坐标轴的线段连接两个中心,平行于x轴的线段长度若记为cenX,另一个记为cenY,我就判断cenX,Y与两矩形边长的关系。

做完后才发现对第二问毫无帮助,炸了。

浴室这一题200分我得了不到100分。

(没代码)

题目三、

这道题其实没怎么做出来,就不好说什么。

下面是这道题正解的源码:

#include

#include

#include

usingnamespacestd;

intnum[400][400];

intlen[400][400];

intmax(inta,intb)

{

if(a>b)

returna;

else

returnb;

}

intmain()

{

intm,n;

scanf("%d%d",&m,&n);

for(inti=1;i<=m;i++)

{

len[i][0]=0;

for(intj=1;j<=n;j++)

{

len[0][j]=-1;

scanf("%d",&num[i][j]);

if(num[i][j])len[i][j]=len[i][j-1]+num[i][j];

elselen[i][j]=0;

}

}

stackS;

intans=0,tmp;

for(intj=n;j>0;j--)

{

intW,L;

tmp=0;

if(ans>=j*m)

break;

(0);

for(inti=1;i<=m;i++)

{

if(len[i][j]>len[()][j]){(i);}

else

{

while(!

()&&len[i][j]<=len[()][j])

{

L=();

();

intp=();

W=(i-p-1);

tmp=max(tmp,W*len[L][j]);

}

(i);

}

}

intLL;

if(!

())LL=();

while(!

())

{

L=();

();

intp=();

if(p)W=(LL-p);

else{W=LL;();}

tmp=max(tmp,W*len[L][j]);

}

ans=max(tmp,ans);

}

printf("%d\n",ans);

return0;

}

三.华为挑战赛(也是模拟机试)

题目一、

这种第一题摆明了是送分题,不好说什么,有一点编程底子的10分钟内都能做出来

#include

#include<>

usingnamespacestd;

intmain()

{

intm,n;

inti,j;

inttemp;

boolflag;

cin>>m>>n;

for(i=m;i<=n;i++)

{

flag=true;;

temp=(int)sqrt(i);

for(j=2;j<=temp;j++)

{

if(i%j==0)

flag=false;

}

if(flag==true)

cout<

}

return0;

}

题目二、

卧槽,这道题我要吐槽。

因为一些原因和问题,导致这道题占用了我整个考试3/4多的时间,这也明显是我的不足,此处进行自我检讨和总结。

Point:

输入输出(这里是我的薄弱项!

这也是这道题最主要的内容和考察点。

其实题目本身算法不难,对输入的每一个数,遍历输入的每一个数,统计被整除的次数count,只要count>=2就是结果输出。

那么接下来问题来了:

1.计算机如何接受这些输入,因为有要求以“,”为分隔符

因为有“,”,作为字符存在,又不限制输入的具体个数,所以无法用int数组接收这些输入,此处应选择C++字符串stringstr;作为接收输入。

那么很明显,本题对C++字符串是一个考察点,并且考察重要程度甚至大于这道题的算法本身。

2.如何在一个str中取得这些数字

毫无疑问考察应试者的字符串处理能力。

我先想的是以逗号为分隔符,由于C++字符串可以以下标取出值(如str[i]),取得每一个逗号的位置,后一个减前一个得到中间的数字。

然后发现()函数会连逗号一起取出,所以这不是一个可取的方法,更不是一个好方法。

好的处理方法应该是这样,如下:

chara[10];

intp=0;

intnum[N];

inti,j,cnt=0;

[cpp]viewplaincopy

pre">cin>>str;

for(i=0;i<();++i)写字母转成下一位大写字母,如A转成B,特例为Z转成A

2.小写字母类似

3.对数字做如下转换:

偶数减2,特例0转成8;奇数加1,特例9转成0.

第二题

算麻将的番数:

规则如下:

1.有条和饼两副牌,使用T与O表示,1T代表1条

2.其中出现1条2条3条连着则加1番

3.出现4个一样的牌则代表杠,加两番

连对则加4番

输入规则:

输入者保证牌数已经胡了,格式例如"1T2T3T,4O5O6O,3T4T5T,5O6O7O,7T7T.".中间使用“,”逗号隔开,结尾是句点。

输出规则:

输出一个整型值代表番数。

第三题

找出一篇文章中单词出现频率最高的前两位(不分并列情况):

文章字符串规则如下:

1.文章单词使用空格、句点与逗号分隔

2.全部转成小写字母

考后感

题目分数:

第一道60分;第二道100分;第三道160分;自己做对了前两道,160分吧,一般。

最后一题只剩10分钟了,也没去做了。

感谢

非常感谢华为(尤其是刘茜,我不知道她是谁),之前本来第一次笔试我回短信就已经晚了,而且第二天有因为非常紧急的事情又不能去了,只能表示歉意。

谁知还给自己一次机试的机会。

在此对这种负责的精神表示崇高的敬意!

七.2016机试题目

 

实现语言:

C++题目简单,没有涉及太多的算法,就是一些输入输出的格式需要注意

题目一

描述

根据指定的分隔符分隔字符串,并输出指定的段。

如果指定的段超过分隔的段数,输出:

NULL

举例:

AAA?

BBB?

CCC?

?

2

字符串为:

AAA?

BBB?

CCC?

分隔符为:

指定的段为:

2

字符串分割为:

AAABBBCCC共三段,第2段字符串为:

BBB

输入输出格式要求

输入分隔字符串长度小于128个字符,指定的段是一个正整数。

样例

输入:

AAA?

BBB?

CCC?

?

2

输出:

BBB

实现代码如下:

#include

#include<>

#include

#include

#include

usingnamespacestd;

intgetNum(stringinpus)

{

intobjNum=0,t=1;

for(longi=()-1;i>=0;--i){

if(isdigit(inpus[i])&&inpus[i]!

='?

'){

objNum+=(inpus[i]-'0')*t;

t*=10;

}else{

break;

}

}

returnobjNum;

}

intmain(intargc,constchar*argv[]){

stringinpus;

cin>>inpus;

vectorobjStringInfo;

stringa="";

for(inti=0;i<();++i){

if(inpus[i]=='?

'||i==()){

(a);

a="";

}

else{

a+=inpus[i];

}

}

cout<

return0;

}

运行结果:

题目一.png

题目二

输入一组大于0小于1000的整数,且均不相同,逗号隔开,输出其中能被这些整数中其他元素整除的那些元素。

输入输出格式要求

输入要求同上述描述,输出要求整数顺序按照输入时的顺序输出。

样例

输入:

2,4,6,8,10,12,3,9

输出:

4,6,8,10,12,9

代码如下:

#include

#include

#include

usingnamespacestd;

intgetStringNum(stringinpus)

{

intobjNum=0,t=1;

for(longi=()-1;i>=0;--i){

if(isdigit(inpus[i])&&inpus[i]!

='?

'){

objNum+=(inpus[i]-'0')*t;

t*=10;

}else{

break;

}

}

returnobjNum;

}

vectorgetNum(stringinputs)

{

vectorv;

vectornum;

stringbuff="";

for(inti=0;i<=();++i){

if(i==()-1){

buff=inputs[()-1];

(buff);

buff="";

}

if(inputs[i]==','){

(buff);

buff="";

}else{

buff+=inputs[i];

}

}

for(inti=0;i<();++i){

(getStringNum(v[i]));

}

returnnum;

}

intmain(intargc,constchar*argv[]){

strings;

cin>>s;

vectorarray=getNum(s);

intk=0,result[100]={0};

for(inti=0;i<();++i){

for(intj=0;j<();++j){

if(array[i]%array[j]==0&&array[i]!

=array[j])

{

result[k]=array[i];

k++;

break;

}

}

}

for(inti=0;i

{

if(i!

=k-1)

cout<

else

cout<

}

return0;

}

题目三

描述:

大数求余

输入两个超长整型构成的字符串,使用空格隔开,求前者除以后者的余数。

输入输出格式要求

输入的每个字符串最大长度为100个字符,输出为余数值,如果结果异常输出NULL

样例

输入:

9

输出:

6172844

主要涉及大数问题,A对B取模,即除法运算,可以利用高精度减法解决,前期想的时候细节上可能会有问题,需要注意减法过程中对符号的处理

代码如下:

#include

#include

#include

usingnamespacestd;

stringsubtraction(stringa,stringb)//大数减法

{

intarr1[100]={0},arr2[100]={0},arr3[100]={0};

for(longi=()-1,k=0;i>=0;--i){

arr1[k++]=a[i]-'0';

}

for(longi=()-1,k=0;i>=0;--i){

arr2[k++]=b[i]-'0';

}

longlen=()>())?

():

();

intk=0;

for(inti=0;i

arr3[k++]=arr1[i]-arr2[i];

}

for(inti=0;i

if(arr3[k-1]<0){

arr3[k]='-';

arr3[i]=abs(arr3[i]);

}else{

arr3[i]=abs(arr3[i]);

}

}

stringresult="",buff="";

while(arr3[k]==0){

k--;

}

for(inti=k;i>=0;--i){

buff=arr3[i]+'0';

result+=buff;

}

returnresult;

}

stringaModeB(stringa,stringb)//大数取模

{

if()>()){

while(b)>0){

a=subtraction(a,b);

}

returna;

}

elseif()==())

{

if(b)>0)

{

while(b)>0){

a=subtraction(a,b);

}

returna;

}

else

returna;

}

else

returna;

}

intmain(intargc,constchar*argv[]){

stringa,b;

cin>>a;

cin>>b;

cout<

return0;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2