当前位置: 首页 > 面试经验 >

华为软件开发笔试-1

优质
小牛编辑
158浏览
2023-03-28

华为软件开发笔试-1




华为嵌入式软件与通用软件类的笔试题是同一题库出的题


题型:3道编程题


答案在底部


题目1


1、码流等分


有一段2进制数据码流n,请将数据切分成3,每一段得到相同的2进制值;


:输入为1010010,可以切分为1010010 3,都表示10进制中的2如果无法做到,则输出-1,如果输入码流全部为0,视作无法做到,输出-1;


 


解答要求


时间限制:C/C++ 10ms,其他语言:20ms


内存限制:C/C++64MB,其他语言:128MB


 


输入


一串字符串,内部都为01的字符,最小长度为3个字节,最大长度为50000个字节


输出


切分后的32进制数据


 


样例1


输入:100101000001001010000100101


输出:100101 00000100101 0000100101


解释:切分后的3段都为十进制的37


样例2


输入:1001010001010010100001011010


输出:-1


解释:


样例3


输入:0000111101000111110100010001111010001


输出:00001111010001 1111010001 0001111010001


解释:切分后的3段都为十进制的977


 


题目2


2、薪酬统计


某公司拥有N名员工,HR按照职级由低到高(假设不存在职级相同)导出整个公司的人员薪酬数组L,当出现低职级员工薪酬>高职级员工薪酬*2时需要调整低职级员工薪资,调整工作由统计完成之后再进行。现在请计算出整个公司需要调整的总数。


N<= 5000


0<L<2^31


 


解答要求


时间限制:C/C++1000ms.其他语言:2000ms


内存限制:C/C++256MB,其他语言:512MB


输入


输入第一行是数组长度N,第二行是长度为N的整数数组,每个元素代表员工薪酬,数组按照职级从低到高的顺序排列


输出


一个整数,表示整个公司需要调整的总数


样例1


输入:


5


[1,3,2,3,1]


输出:


2


解释:输入有5个员工,员工的薪酬分别为1.3.2.3.1。职级从低到高,数组索引为1的员工薪酬为3,索引为4的员工薪酬为13>1*2,所以需要调整第—次。索引为3的员工薪酬为3。索引为4的员工薪酬为1,需要调整第二次。


 


题目3


3、佩奇和乔治能量豆大PK


有一个盒子存放若干个能量豆,每块能量豆都有对应的能量值,能量值都是正整数,用数组energyBeans表示,其中energyBeans[0]表示第i块能量豆的能量值。佩奇和乔治两兄弟每轮PK都是随机从盒子各取出一块能量豆进行PK。假如每轮PK,佩奇每次取出的能量豆的能量值为x,乔治每次取出的能量豆的能量值为y。那么PK结果如下:


如果x==y,那么两块能量豆的能量值被完全中和消失;


如果x!=y,PK结果产生新的能量豆的能量值zxy的差值的绝对值(z= abs(x-y)).然后把能量值为z能量豆放回到能量盒中;


经过多轮PK,最后盒子中最多只会剩下一块能量豆。返回此能量豆的最小可能能量值。如果没有能量豆剩下,就返回0


 


解答要求


时间限制:C/C++1000ms,其他语言:2000ms


内存限制:C/C++ 256MB,其他语言:512MB


输入


输入是2;


第一行能量豆个数n,1<=n <=10*3;


第二行是能量豆的能量值,1<= energyBeans[]<=1000;


输出


输出盒子中剩余最后一块能量豆的能量值,如果没有能量豆剩下,就输出0


 


样例1


输入:


6


2 7 4 1 8 1


输出:


1


解释:先选出78,得到1转换后数组为12.4.1.1.1].


再选出24,得到2,转接后数组为[2.1.1.1].


接着是21,得到1,转换后数组为[1-1.1].


最后选出11,得到0,最终数粗转换为1为最后剩下能量豆的能量值。


样例2


输入:


2


20 5


输出:


15


解释:选出205。得到15,转换后数组为15,


#include<bits/stdc++.h>

using namespace std;

vector<int> threeEqualParts(vector<int>& arr) {
int cntOne=accumulate(arr.begin(),arr.end(),0); //从头加起来
if(cntOne%3!=0)return {-1,-1}; //1的个数是否为3等分
if(cntOne==0)return {-1,-1}; //如果全是0
cntOne/=3; //一组有几个1,例如1010010 就是1
int beg1=0,beg2=0,beg3=0;
int curOneCnt=0;
for(int i=0;i<arr


 类似资料: