华为嵌入式软件开发工程师笔试5-10
公号:嵌入式未来
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《嵌入式软件笔试-2023年真题汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
题目1:
1、数据合并
向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设:栈顶至栈底整数依次编号为n1、n2...nx,n1为最新压入的整数)
1.如果n1=n2,则n1、n2全部出栈,压入新数据m(m=2*n1)。
2.如果n1=n2+...+ny(y的范国为[3,x]) ,则n1、n2...ny全部出栈,压入新数据m(m=2*n1).
3.如果上述规则都不满足,则不做操作
如: 依次向栈压入6、1、2、3,当压入2时,栈顶至栈底依次为[2、1、6];当压入3时,3=2+1,3、2、1全部出栈,重新入栈整数6(此时n1=3,因此m=2*3=6),此时栈顶至栈底依次为[6、6];6=6,两个6全部出栈,压入12(此时n1=6,因此m=2*6=12),最终栈中只剩一个元素12.
向栈中输入一串数字,请输出应用此规则后栈中最终存留的数字
输入
使用单个空格隔开的正整数的字符串,如"5 6 7 8”,左边数字先入栈。
输出
最终栈中存留的元素值,元素值使用单个空格隔开,如"8 7 6 5”,从左至右依次为栈顶至栈底的数字。
样例1
输入: 10 20 50 80 1 1
输出: 2 160
解释:向栈压入80时,10+20+50=80,数据合并后入栈160,压入两个1时,合并为2,最终栈顶至栈底的数字为2和160。
样例2
输入: 6 4 8 13 9
输出: 9 13 8 4 6
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
vector<int> st;
void solve() {
if (st.size() > 1 && st.back() == st[st.size() - 2]) {
int num = st.back();
st.pop_back();
st.pop_back();
st.push_back(2 * num);
solve();
} else if (st.size() >= 3) {
int sum_ = 0;
for (int i = 0; i < st.size() - 1; ++i) {
sum_ += st[st.size() - i - 2];
if (sum_ >= st.back()) {
if (sum_ == st.back()) {
for (int j = 0; j < i+2; ++j) st.pop_back();
st.push_back(2 * sum_);
solve();
}
break;
}
}
}
}
int main() {
string line;
getline(cin, line);
istringstream iss(line);
int num;
while (iss >> num) {
st.push_back(num);
solve();
}
while (!st.empty()) {
cout << st.back();
st.pop_back();
if (!st.empty()) cout << " ";
else cout << "\n";
}
return 0;
}
题目2:
敌占区地下工作者冒死提供了加密后的字符串,需要你根据质先定好的方式进行解密,得到其中真正的密码。加密后字符串M是由0-9这10个数字组成的字符串,你手上是个给定秘钥数字N和一个运算符k (加减乘中的一个),需要按如下规则找出真正的密码
1.截取M中的某一段数字x,和数字N进行k运算 (x k N) ,如果结果是一个所有位数相同的数,则这段数字有可能就是所找密码,例如x为222,N为3,k为*,则计算结果是222*3=666,满足要求,x是所寻目标密码串之一。
2.如果存在满足第1点的多种情况,则以计算结果最大的为准;
3.如果没有找到符合条件的密码串,则输出-1,表示密码串不存在
4.M的长度<100,N为正整数,且N<=9999999999,3<=所找密码长度<=12。k为+或-或*中的一种,不考虑除法。为避免数据过于庞大,约定在乘法场景下,乘数最大为3位数。
输入
提供加密后字特串M,秘们数字N和运约符k,例如:
(密字特串M)748443217098
(秘钥数字N) 123
(运符k)+
输出
满足计算结果所有位数相同,且计算结果最大的值。
例如:上还例子截取44321,和123相加,则为44321+123=44444,结果所有位的数字字符相同,包括个位数、十位数、百位数、千位数和万位数都是同一个数字字符4,且其值最大。
(目标字符串) 4
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。
