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

全部评论

相关推荐

1、自我介绍2、Agent项目是实习项目还是个人项目?有没有上线?3、拷打实习(10min)4、大模型微调,你的训练数据集是如何构建的?数据量有多大?5、在构建数据集的过程中,遇到了哪些挑战?花了多长时间?6、你之前的实习经历偏后端工程,你未来的职业规划更倾向于纯后端开发,还是希望从事与AI/大模型结合的工作?7、详细讲一下Golang中Channel的概念和作用,它是否是并发安全的?8、Channel和传统的锁(Mutex)在实现并发控制时有什么区别?各自的适用场景是什么?9、讲一下GMP模型10、当P的本地队列为空或者不为空时,它会怎么去调度G(协程)?11、Redis支持哪些数据结构12、为什么Redis的速度这么快13、如何实现一个类似淘宝搜索框的实时商品名称模糊搜索功能?14、实时输入联想与输入完成后点击搜索在技术实现上有什么本质区别?15、实时搜索通常使用什么网络协议(如WebSocket)?你了解或有使用过吗?讲一下16、请详细说明微信扫码登录的完整流程和背后发生的原理17、在微服务架构中,服务发现和负载均衡是如何实现的?18、服务注册中心(如Nacos,&nbsp;Consul)是如何工作的?服务实例如何注册和保活(如通过心跳机制)?19、讲一下Agent中的“长短期记忆”20、什么样的信息应该放在长期记忆,什么样的信息放在短期记忆?21、当对话轮数很多,上下文窗口不足时,有哪些处理策略?(如截断、压缩)22、如果要进行记忆压缩,通常有哪些方法?23、了解过Agent的设计范式吗?有哪些?24、你设计的Agent是怎么实现ReAct模式的?详细讲讲25、手撕:实现一个并发任务处理器:给定一个包含100个任务ID的列表,要求控制最大并发数为3,模拟并发调用某个外部接口(如打印ID)26、反问
查看24道真题和解析
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务