华为历年秋招笔试真题
如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)
不收费,3人组团即可一块免费领取!限量免费10000个名额
手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2
电脑端请扫码领取:
1、整数反转求和
【题目描述】请您写一个reverseAdd函数, 该函数根据输入的两个正整数a和b, 然后分别将它们的数字按照高位在右边的方式反转后求和。
例如,reverseAdd(123, 456) == 321 + 654 == 975
输入描述:
函数原型:int reverseAdd (int a, int b);
输入:
输入的a,b参数均为有效取值范围[1, 70000]区间上的正整数。
100和200反转后的值为1和2(前导0被忽略)
输出描述:
输出:
通过函数返回值输出结果。
若输入的a或b参数超出了取值范围(小于1或者大于70000),则应输出-1;
否则应按照要求输出数字反转后的和。
注意:最终交付的函数代码中不要向控制台打印输出任何信息。
输入样例:
123,456
输出样例:
975
【解题思路】
二分答案,然后check这个答案的rank,这一步可以用two pointers O(n)解决。
复杂度O(nlogn)
对整数进行拆分之后翻转,然后求和即可。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int main()
{
string m,n;
while(cin>>m>>n)
{
int x=0,y=0,i;
if(m[0]=='0'&&n[0]=='0')
break;
for(i=m.size()-1;i>=0;i--)
x=x*10+m[i]-'0';
for(i=n.size()-1;i>=0;i--)
y=y*10+n[i]-'0';
cout<<x+y<<endl;
}
return 0;
}
2、消除重复数字
【题目描述】给定一个正整数,给出消除重复数字以后最大的整数
输入描述:
正整数,注意考虑长整数
输出描述:
消除重复数字以后的最大整数
输入样例:
423234
输出样例:
432
【解题思路】
指针i,j 从数字字符串的首地址开始遍历,j作为查重的指针(在 [0,i] 之间的字符子串)
如果出现重复数字,即str[j] = str[i],那么根据题目要求,是消除重复数字以后的最大整数,就要做一个比较,判断是移除i位置的数字还是j位置的数字,如果str[j+1] > str[j],应该移除j位置的重复数字,否则移除i位置的重复数字以保证局部最大整数
【参考代码】
#include <iostream>
#include <string>
using name space std;
int main()
{
string s;
while(cin>>s)
{
string res;
res = s[0];
for (int i = 1; i < s.size(); i++)
{
if (res.find(s[i]) == string :: npos)
{
res + = s[i];
}
else
{
int t = res.find(s[i]);
if ((t+1) < res.size())
{
if (res[t] < res[t+1])
{
res.erase(t, 1); // 移走并且调整
res + = s[i];
}
}
}
}
cout<< res <<endl;
}
return 0;
}
3、仿
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码
巨人网络成长空间 53人发布
查看5道真题和解析