华为笔试(8.21)

第一题题意:给你一串字符串(数字和字母),把里面的A字母和B字母替换掉,然后输出替换后的字符串和长度,里面的数字都是16进制。就是A转换为12和34,B转换为AB和CD,这里都没问题,就是每个字符串第一个字符表示这个字符长度,这个长度要用16进制表示。
第一次提交20%,后面把第一位改成16进制就a了,(调了半个小时😓
#include <iostream>
#include <vector>
#include <sstream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <unordered_map>
using namespace std;

string change(int n)
{
    string s = "";
    int y = 0;
    while(n > 0)
    {
        y = n % 16;
        if(y < 10)
            s = char('0' + y) + s;
        else
            s = char('A' - 10 + y) + s;
        n = n / 16;
    }
    return s;
}

int main()
{
    string s;
    vector<string> str;
    getline(cin, s);
    string ch;
    stringstream ss(s);
    while(ss >> ch)
    {
        str.push_back(ch);
    }
    vector<string> res;
    res.push_back(str[0]);
    for(int i = 1; i < str.size(); ++i)
    {
        if(str[i] != "A" && str[i] != "B")
        {
            res.push_back(str[i]);
        }
        else if(str[i] == "A")
        {
            res.push_back("12");
            res.push_back("34");
        }
        else if(str[i] == "B")
        {
            res.push_back("AB");
            res.push_back("CD");
        }
    }
    int n = res.size();
    res[0] = change(n);
    for(int i = 0; i < res.size(); ++i)
        cout << res[i] << " ";
    cout << endl;
    return 0;
}

第二题题意:给你一个区间,求出这个区间内的所有素数十位数和,个位数和之间的较小值。
筛选法,比较简单。
#include <iostream>
#include <vector>
#include <sstream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <unordered_map>
using namespace std;

vector<int> num(10000, 0);
void prime()
{
    num[0] = 1;
    num[1] = 1;
    for(int i = 2; i < 10000; ++i)
    {
        if(num[i] == 0)
        {
            for(int j = 2 * i; j < 10000; j+=i)
            {
                num[j] = 1;
            }
        }
    }
}
int main()
{
    prime();
    int low, high;
    vector<int> numof1;
    vector<int> numof10;
    cin >> low >> high;
    for(int i = low; i < high; ++i)
    {
        if(num[i] == 0)
        {
            numof1.push_back(i%10);
            numof10.push_back(i/10%10);
        }
    }
    int sumof1 = 0, sumof10 = 0;
    for(int i = 0; i < numof1.size(); ++i)
    {
        sumof1 += numof1[i];
    }
    for(int i = 0; i < numof10.size(); ++i)
    {
        sumof10 += numof10[i];
    }
    cout << min(sumof1, sumof10) << endl;
    return 0;
}

第三题题意:给你一个人名(字符串),和几个群组(包含人名),每个人都给所在群组的人发消息,问最终多少个人可以收到消息。
第三题:只过了10%,求思路。


#华为##笔试题目##C++工程师##题解#
全部评论
public class Main3 {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         String name = in.nextLine();         int num = in.nextInt();         int res = 0;         String n = in.nextLine();         String[] groups = new String[num];         for(int i = 0; i < num; ++i){             groups[i] = in.nextLine();         }         List[] lists = new List[groups.length];         for(int i = 0 ; i < lists.length; ++i)             lists[i] = Arrays.asList(groups[i].split(","));         Set<String> set = new HashSet<>();         for(List i : lists) {             if(i.contains(name)) {                 res += i.size();                 set.addAll(i);             }         }         for(List i : lists) {             for(int j = 0; j < i.size(); ++j) {                 if(set.contains(i.get(j))) {                     set.addAll(i);                     break;                 }             }         }         System.out.println(set.size());     } } 看下我的代码,是通过100%的,但是下面的测试例子有问题: Jack 3 Tom,Mary Jack,Lily Lily,Tom 是否可以认为,消息传递群组是从上到下的,有一个时序的关系在?
点赞 回复 分享
发布于 2019-08-21 23:14
第三题 并查集 写了也是0.9,说是有越界,就try catch了一下,异常时输出0就100%了,但还是不知道为啥
点赞 回复 分享
发布于 2019-08-21 23:08
第三题用了hashmap过了0.9
点赞 回复 分享
发布于 2019-08-21 21:26
第一题,主要是要把输入里面的所有都换成大写 第三题,直接输出7 过了30% 玄学。。。
点赞 回复 分享
发布于 2019-08-21 21:19
大佬说一下题目是啥
点赞 回复 分享
发布于 2019-08-21 21:18
大佬能不能详细描述一下三道题目
点赞 回复 分享
发布于 2019-08-21 21:18

相关推荐

大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
2
39
分享

创作者周榜

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