从网上整理的华为机试题目.docx
- 文档编号:12467879
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:16
- 大小:20.05KB
从网上整理的华为机试题目.docx
《从网上整理的华为机试题目.docx》由会员分享,可在线阅读,更多相关《从网上整理的华为机试题目.docx(16页珍藏版)》请在冰豆网上搜索。
从网上整理的华为机试题目
一、华为机试——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;
}
}
stack
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; vector 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; } vector { vector vector 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; vector 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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网上 整理 华为 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)