2020 春招 华为笔试 2月26日

时间是两个小时,总共三道编程题目。

第一道题目大意:

  输入一个int类型的数,判断它的比特流中有多少个“010”,及第一个“101”的下标(这个下标是从低位向高位数的)。

  如:输入:21

    输出   2 0

原因:21  二进制表示为  0000 0000 0000 0000 0000 0000 0001 0101

       总共两个“101”(两个“101”可以重叠), 且第一个下标为0,第二个下标为2,所以返回2 0

提交代码如下

 1 int main(){
 2     int num;
 3     while(cin >> num){
 4         int tag = 5, tag1 = 2;// 分别是101  和  010
 5         int times = 0, numcnt = 30, firstindex = -1;
 6         while(numcnt --){
 7             if((num & tag) == tag && (num & tag1) == 0){
 8                 times ++;
 9                 if(firstindex == -1)
10                     firstindex = 29 - numcnt;
11             }
12             tag <<= 1;
13             tag1 <<= 1;
14         }
15         cout << times << " " << firstindex << endl;
16     }
17     return 0;
18 }

第二道题目大意:

背景:数据库一条记录(包括多个字段:数值,字符串)合并成一个字符串作为输入,现在的任务是将不同的字段分类开来,输出字段的数目和每个字段的内容。

输入一行字符串,将其分割成多段,输入的字符串应满足的条件:

  1. 输入的字符串没有空格
  2. 不同的字段之间以逗号分隔
  3. 如果一个字段内有逗号(“,”)或者引号(“"”),则该字段首尾会加上引号(“"”),且字段内的引号写作""(两个引号)

若输入的字符串有问题,则输出ERROR;

否则,输出字段个数,然后输出每个字段    (各占一行)

我的思路是:因为每个字段引号都是成对的,所以遇见逗号的时候判断此时引号是否成对。若不成对,说明该逗号是字段内部的逗号;反之,该逗号为两字段的分隔号。

提交代码如下:

 1 int main(){
 2     int num;
 3     string inStr;
 4     while(getline(cin,inStr)){
 5         if(inStr.size() == 0){
 6             cout << 0 << endl;
 7             continue;
 8         }
 9         int lastIndex = -1;
10         stack<char> charStack;
11         vector<string> strVec;
12         for(int i = 0; i < inStr.size(); ++ i){
13             if(inStr[i] == ‘"‘){
14                 charStack.empty() ? charStack.push(‘"‘) : charStack.pop();
15             }
16             if(inStr[i] == ‘,‘ && charStack.empty()){
17                 strVec.push_back(inStr.substr(lastIndex+1, i-lastIndex-1));
18                 lastIndex = i;
19             }
20         }
21         if(!charStack.empty()){
22             cout << "ERROR" <<endl;
23             continue;
24         }
25         strVec.push_back(inStr.substr(lastIndex+1, inStr.size()-lastIndex-1));
26         cout << strVec.size() << endl;
27         for(int i = 0; i < strVec.size(); ++ i){
28             if(strVec[i].size() == 0 || (strVec[i].size() == 2 && strVec[i][0] == ‘"‘ && strVec[i][1] == ‘"‘))
29                 cout << "--" <<endl;
30             else if(strVec[i][0] == ‘"‘){
31                 bool flag = false;
32                 for(auto it = strVec[i].begin()+1; it != strVec[i].end(); ++ it){
33                     if(*it == ‘"‘){
34                         if(flag){
35                             printf("\"");
36                             flag = false;
37                         }
38                         else
39                             flag = true;
40                     }
41                     else
42                         printf("%c", *it);
43                 }
44                 printf("\n");
45             }
46             else
47                 cout << strVec[i] << endl;
48         }
49     }
50     return 0;
51 }

第三道题目大意:

背景:好友推荐功能,A和B是好友,B和C是好友,A和C不是好友,则C是A的2度好友;A和B的熟悉度为m,B和C的熟悉度为n,则A和C的推荐度为m+n;

输入:测试用例个数T;

   然后输入每个测试用例:用户数m,某个特定用户的id,要求的好友度数t,已知的好友数目n

              接下来输入n行,每行的内容为:用户1的id 用户2的id 两用户的熟悉度

输出:先输出特定用户的t度好友个数,没有则输出-1;若有,接下来一次输出用户id,按照推荐度从高到低(若推荐度相同,按照id从小到大)

当时的思路是:dijkstra算法找到特定用户t度好友,然后进行排序输出。(但是印象中题目在有两个距离相同的路径时,推荐度采用最高那个还是第一个没有说清楚,也可能是我没理解清楚题意。当时我是注释了部分代码又提交了一下。)

当时提交过了40%,提交代码如下:

int T, userCnt, userId, friendVal, pairCnt;

int dist[50];
int friendValSum[50];
int routeMatrix[50][50];
int valMatrix[50][50];
void dijkstra(int root){
    memset(dist, 0x7f, sizeof(dist));
    memset(friendValSum, 0, sizeof(friendValSum));
    for(int i = 0; i < userCnt; ++ i)
        dist[i] = routeMatrix[root][i];
    for(int i = 0; i < userCnt; ++ i)
        friendValSum[i] = valMatrix[root][i];
    dist[root] = 0;
    vector<bool> flagVec(50,false);
    flagVec[root] = true;
    for(int j = 1; j < userCnt; ++ j){
        int minDis = INF, v = -1;
        for(int i = 0; i < userCnt; ++i){
            if(!flagVec[i] && dist[i] < minDis){
                minDis = dist[i];
                v = i;
            }
        }
        if(v == -1 || minDis > friendVal)
            return;
        flagVec[v] = true;
        for(int i = 0; i < userCnt; ++ i){
            if(!flagVec[i] && routeMatrix[v][i] + dist[v] < dist[i]){
                dist[i] = routeMatrix[v][i] + dist[v];
                friendValSum[i] = valMatrix[v][i] + friendValSum[v];
            }
            /*else if(!flagVec[i] && routeMatrix[v][i] + dist[v] == dist[i] && valMatrix[v][i] + friendValSum[v] > friendValSum[i]){
                friendValSum[i] = valMatrix[v][i] + friendValSum[v];
            }*/
        }
    }
}

typedef struct NODE{
    int id, val;
    NODE(int d, int v):id(d),val(v){}
}node;
bool cmp(node a, node b){
    if(a.val != b.val)
        return a.val > b.val;
    else
        return a.id < b.id;
}
int main(){
    int tmpSt, tmpEnd, tmpVal;
    cin >> T;
    while(T--){
        cin >> userCnt >> userId >> friendVal;
        cin >> pairCnt;
        memset(routeMatrix, 0x7f, sizeof(routeMatrix));
        memset(valMatrix, 0x7f, sizeof(valMatrix));
        for(int i = 0; i < pairCnt; ++ i){
            scanf("%d %d %d", &tmpSt, &tmpEnd, &tmpVal);
            routeMatrix[tmpSt][tmpEnd] = 1;
            routeMatrix[tmpEnd][tmpSt] = 1;
            valMatrix[tmpSt][tmpEnd] = tmpVal;
            valMatrix[tmpEnd][tmpSt] = tmpVal;
        }
        dijkstra(userId);
        //if(friendVal == 0){
        //    cout << "-1" << endl;
        //    continue;
        //}
        vector<node> nodeVec;
        for(int i = 0; i < userCnt; ++ i){
            if(dist[i] == friendVal){
                nodeVec.push_back(NODE(i, friendValSum[i]));
            }
        }
        if(nodeVec.size() == 0)
            cout << "-1" << endl;
        else{
            sort(nodeVec.begin(), nodeVec.end(), cmp);
            bool flag = false;
            for(int i = 0; i < nodeVec.size(); ++i){
                flag ? printf(" ") :flag = true;
                printf("%d", nodeVec[i].id);
            }
        }
        printf("\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/codewars/p/12375308.html

时间: 2024-08-01 22:36:24

2020 春招 华为笔试 2月26日的相关文章

[转帖]ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布

ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布 https://www.cnbeta.com/articles/tech/909025.htm 主流的手机SoC厂商已经纷纷宣布或者发布了旗下集成5G基带的芯片,包括高通的骁龙7系.华为麒麟990 5G.三星Exynos 980.联发科5G SoC等.据外媒报道,联发科定于11月26日举办MTK技术峰会,正式推出旗下首款5G SoC芯片,型号MT6885Z. MT6885基于台积电7nm工艺,CPU和GPU均用上了最新最

软考中高项学员:2016年3月26日作业

软考中高项学员:2016年3月26日作业一.质量管理1.质量管理基本原则?2.质量管理的目标?3.质量管理的主要活动有哪些?(记)4.质量管理流程包括哪四个环节?(记)(按P'DCA理解记忆)5.ISO9000质量管理的8项原则是什么?6.全面质量管理是一种全?.全?.全?的品质管理?它由结构.技术.人员.变革推动者4个要素组成.7.全面质量管理有哪4个核心的特征?8.六西格玛意为六倍标准差,在质量上表示每百万坏品率少于多少?9.六西格玛管理法的核心是什么?而DMAIC是什么意思?包括哪四个要素

4月26日上午学习日志

2017年4月26日上午继续按照昨天记忆单词的方法,把英语单词的多种词意联系起来记忆,今天听写了一下昨天所背单词,确实比以前记忆的要好,此外就看专业课视频了解了机器语言,汇编语言,高级语言.机器语言是计算机可以识别并运行的二进制代码 汇编语言是将二进制的机器码通过助记符的方式让人可以更方便的编写并检查的低级语言 汇编语言接近机器语言,可以看做是机器语言的另一种形式,计算机在运行时也需要将其变为机器语言的二进制才可运行 高级语言最接近人类语言,但机器是无法执行的,需要最终编译连接成二进制的机器代码

Linux运维学习-4——2016年7月26日

格式说明: 操作 概念 命令 说明及举例 四 du -sh /sys 查看文件.文件夹大小 /sys/class/scsi_host/host2/scan 在线扫盘(新加硬盘执行这个命令后才能发现) stat /etc/issue 更详细的看数据 蓝色:目录绿色:可执行文件浅蓝色:链接文件红色:压缩文件 创建-h文件名的文件,删除?访问?绝对路径 -:常规文件d:目录l:链接文件b:块设备(比如硬盘,有缓存)c:字符设备(不真实存在,没缓存) p:管道文件 例: 命令1 | 命令2 命令1的输出

3月26日作业

软考中高项学员:2016年3月26日作业一.质量管理1.质量管理基本原则? 答:1)以实用为核心的多元要求:2)系统工程:3)职工参与管理:4)管理层和一把手重视:5)保护消费者权益:6)面向国际市场.2.质量管理的目标? 答:1)顾客满意度:2)预防胜于检查:3)各阶段内的过程.此外,实施组织主动采纳的质量改进措施(如全面质量管理.持续改进等)不仅可以提高项目管理的质量,而且也能提高项目产品的质量.3.质量管理的主要活动有哪些?(记) 答:质量策划,质量保证与质量控制过程.4.质量管理流程包括

豪迪qq群发器2014破解版(5月26日)haodi软件QQ5.5群发

软件名称:豪迪qq群发器2014破解版(5月26日)haodi软件QQ5.5群发软件说明:官方对豪迪进行了更新,应该是针对QQ的版本升级到QQ5.5 的改变,已经针对QQ5.5测试过可以使用破解使用:(下载前后看下说明)1.小众论坛回帖下载豪迪qq群发器2014破解版(5月26日)haodi软件QQ5.5群发2.运行qqqf.exe3.运行 豪迪QQ2014破解(5月26日)破解补丁.exe  点击小众论坛破解4.开始使用吧.测试截图: 土豪下载通道:http://tuan.xzrj.cc/vi

4月26日作业

2016年4月26日作业 一.项目整体绩效评估1.*三E审计是什么的合称?(记)  答:经济审计,效率审计和效果审计2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的? 答:逻辑,时间和知识3.*投资回收期的公式?(记,并理解)  答:n=-log(1-pio/a)/log(1+io)  n投资回收期,p投资的现值,io基准收益率,A年等额经营成本二.信息安全相关知识1.在三安系统三维空间示意图中,X,Y,Z轴分别代表什么意思?(记)同时,X.Y.X上分别有哪些要素?  答:x表示安全机制即

软考高项学员:2016年4月26日作业

软考高项学员:2016年4月26日作业 一.项目整体绩效评估1.三E审计是什么的合称?(记)  答:经济审计,效率审计和效果审计2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的? 答:逻辑,时间和知识3.投资回收期的公式?(记,并理解)  答:n=-log(1-pio/a)/log(1+io)   n投资回收期,p投资的现值,io基准收益率,A年等额经营成本二.信息安全相关知识1.在三安系统三维空间示意图中,X,Y,Z轴分别代表什么意思?(记)同时,X.Y.X上分别有哪些要素?  答:x表

2016年3月26日作业 质量管理和人力资源管理

2016年3月26日作业 质量管理和人力资源管理一.质量管理1.质量管理基本原则? 质量管理基本原则是: 以实用为核心的多元要求 系统工程 职工参与管理 管理层和第一把手重视 保护消费者权益 面向国际市场 2.质量管理的目标? 顾客满意 预防胜于检查 各阶段内的过程 实施组织主动采纳的质量改进措施(如全面质量管理.持续改进等)不仅可以提高项目管理的质量,而且也能提高项目产品的质量 3.质量管理的主要活动有哪些?(记) 质量策划:是指确定与项目有关的质量标准,并决定如何达到这些质量标准. 质量保证