华为嵌入式软件开发工程师笔试5-6
公号:嵌入式未来
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《嵌入式软件笔试-2023年真题汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
1
输入
第一行为喷墨头水平排列的小孔个数N,10≤N≤1024;
第二行为N个bit的序列,用双字节十六进制数表示,如果N超过16,则用多个双字节十六进制表示,它们之间用空格分割。其中0表示该bit对应位置的小孔为堵塞的孔,1表示正常的孔。有效bit从第一个十六进制的最高位开始计算,序列尾部如果有无效bit则用1填充。
输出
第一行输出可以完成补偿的方案个数,同一个方向只需要给出移位最少的方案。如果无法找到多孔补偿策略或者不需要补偿,输出0。
第二行开始,每两行为一个数据分组,分组中,
1)第一行为相对于喷墨头原始位置平移方向和平移的小孔个数,用±X表示,向右为+,向左为-;
2)第二行为N个bit的序列,用"0"或"1"的连续字符序列表示,其中"0"表示该bit对应位置的小孔关闭喷墨,"1"表示打开喷墨
3)如果存在多个方案,先输出向右移动的方案
样例1
输入:
14
0xE77F
输出:
2
+2
01100010000000
-2
00000110001000
解释: 输入中第二行的十六进制数0xE77F,其中只有前14个bit有效,转换为进制序列为11100111011111;
输出表示有2种补偿方案,分别是右移2个小孔和左移2个小孔,对应的'0'/'1'连续字符序列表示所有孔的开关状态。
样例2
输入:
18
0x677F 0xFFFF
输出:
1
-2
001001100010000000
解释:输入中第二行的十六进制数0x677F 0xFFFF,其中只有前18个bit有效,转换为二进制序列为011001110111111111;
输出表示有1种补偿方案,左移2个小孔,对应的O1连续字符序列表示所有孔的开关状态。
骗分,直接输出0,通过47%
2、表达式计算
给定一个字符串形式的表达式,保证每个字符串表达式中仅包含加(+)这1种运算符,计算并输出表达式结果。
要注意的是,+号两边的数据仅可能包含数字字符、小数点字符与特殊字符,特殊字符包括!@#,这些特殊字符的加法运算有特别的规则:
!+!=0
!+@=13
!+#=4
#+#=5
注意:
1.保证每个表达式仅包含一个运算符
2.保证表达式一定可运算且有数据结果
3.保证运算符两边数据有效(不会出现包含两个小数点之类的无效数据)
4.表达式内不存在空格
5.特殊字符的加法运算符合交换律
6.如果表达式中包含特殊字符,则运算中不会出现数字与特殊字符的加法运算
7.表达式两边的数据均不以0开头,比如不会出现这样的表达式:0250+0110
输入
第一行:代表字符串长度 (长度在[1,1000]之间)
第二行:代表一个字符串表达式
输出
输出一行,输出表达式结果
注意: 小数最后位如果为0则省略,如结果250.010则输出250.01,结果250.0则省略为250;同时,如果计算结果为“0250”,也需以最简化形式"250"输出。
样例1
输入:
15
123.45#1+126.53@
输出:
250.0001
解释: #+@=20,即进2位,表达式结果为250.0001
竖式运算如下:
123.45#1
126.53@
250.0001
样例2
输入:
7
1#3+1#0.4
输出:
253.4
解释: #+#=5,即253.4
竖式运算如下:
1#3
1#0.4
253.4
#include <iostream> #include <string> #include <map> #include <cmath> #include <iomanip> using namespace std; int main() { int n; cin >> n; string s; cin >> s; string a, b; size_t pos = s.find("+"); a = s.substr(0, pos); b = s.substr(pos + 1); map<char, int> sc = {{'!', 0}, {'@', 0}, {'#', 0}}; map<pair<char, char>, int> sr = {{{'!', '!'}, 0}, {{'!', '@'}, 13}, {{'!', '#'}, 4}, {{'@', '@'}, 7}, {{'@', '#'}, 20}, {{'#', '#'}, 5}}; string az, ax, bz, bx; pos = a.find("."); if (pos != string::npos) { az = a.substr(0, pos); ax = a.substr(pos + 1); } else { az = a; ax = "0"; } pos = b.find("."); if (pos != string::npos) { bz = b.substr(0, pos); bx = b.substr(pos + 1); } else { bz = b; bx = "0"; } int add = 0; if (az.find('!') != string::npos || az.find('@') != string::npos || az.find('#') != string::npos) { for (int i = 0; i < az.length(); ++i) { char az_char = az[az.length() - i - 1]; if (sc.find(az_char) != sc.end()) { pair<char, char> key = {az_char, bz[bz.length() - i - 1]}; int cur = (sr.find(key) != sr.end()) ? sr[key] : sr[{key.second, key.first}]; add = cur * pow(10, i); for (auto& c : sc) { az.erase(remov
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。