华为嵌入式软件开发工程师笔试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

@+@=7

@+#=20

#+#=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++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务