您的位置:首页 > 其它

华为2016届实习生招聘(武汉)笔试

2015-04-22 20:52 302 查看
  2015年4月22日,作者在本校机房参加了华为2016届实习生招聘软件类岗位的上机笔试。华为笔试采用华为自己的在线编程平台http://career-oj.huawei.com (类似的在线编程平台还有http://www.hihocoder.com,这个比OJ可能要做得好一些,是我偏爱的平台,喜欢编程刷题的不妨常去逛逛),要求在两小时之内完成三道编程题,题目比较基础,只要基础还行,仔细编码,做出来问题不大。

1.关于答题流程

  要进行笔试,需要提前注册华为OJ平台(前文提及),在个人资料里绑定***号和简历编号。笔试前刷***签到。

  首先要完成性格测试,这是所有岗位都要参加的。之后便是软件类岗位的笔试。

  后台开放笔试后,可以在OJ平台‘竞赛’栏目找到笔试题目,里面有三道题,任意一道题后被第一次点击后开始计算该题作答用时。点击进去才能看到题目内容,页面下方是代码编辑区,可以选择编程语言,完成后提交代码,每道题有5次提交机会。提交后系统会进行评测,对于编译错误、运行时错误、答案错误、答案正确等情况返回相应结果,并计算得分,满分为150分,通过的样例测试越多,分数越高。

  笔试中会对所有选手排名,首先看得分,得分相同看提交次数,提交次数相同看作答总用时。所以请使用电脑上的编程工具测试无误后再提交代码,减少提交次数。

2.关于试题

三道题如下:

1)解析报文,找到字段和字段的值输出。

对于这样的输入样例

  
name=Justin,age=19,job=lawer


得到这样的输出样例

  
[[name,Justin],[age,19],[job,lawer]]


熟悉web的同学可能对此比较熟悉,http 的GET请求就是在请求的URL后加上?user=username&clientid=123456这类的后缀用来发送数据的,这里传了两组数据

变量名变量值
userusername
clientid123456
我们要做的就是将后缀里面的变量名、变量值分组,然后按照例子所示的格式输出。

2)颠倒数字相加

输入: 一行数据,两个数,中间用空格隔开

输出:将输入的两个数字反序,去掉反序后开始部分的0,然后将反序之后的数据相加,输出结果。

例如:

输入:
210 80


输出:
20


3)Excel的列编号

我们知道,Excel的列是这样编号的:

a, b, c, …, z, aa, ab, …,az, ba, bb, …, bz, …za, …, zz, …, aaa……

它们对应的数字序号是1,2,3 … 26, 27, 28, … 56, 57,……。

编写程序,实现输入一个字母列号,输出数字列号。

如果感兴趣的话不妨做一做,我会在分割线后给出解答。

-----------------------------

            传说中的分割线

-----------------------------

[code]    #include <iostream>
    #include <cstring>
    #include <string>
    using namespace std;
    int toNum(char *);
    void test1();
    void test2();
    void test3();
    int main()
    {
        int choice;
        //选择题号
        cin>>choice;
        switch(choice)
        {
        case 1:
            test1(); break;
        case 2:
            test2(); break;
        case 3:
            test3(); break;
        }
        return 0;
    }

    //第一题
    void test1()
    {
        string input;
        cin>>input;
        cout<<"[[";
        for(int i = 0; i < input.length(); i++){
            if(input.at(i) == '=')
                cout<<',';
            else if(input.at(i) == ',')
                cout<<"],[";
            else
                cout<<input.at(i);
        }
        cout<<"]]"<<endl;
    }

    void test2()
    {
        char num1[20], num2[20];
        cin>>num1>>num2;
        cout<<toNum(num1) + toNum(num2)<<endl;
    }

    int toNum(char * input)
    {
        int end, res = 0, base = 1;
        char *pos;
        end = strlen(input);
        //清除尾部的0字符
        while(input[end - 1] == '0') end--;
        input[end] = '\0';
        //如果输入全0,则字符数组被清空
        for(pos = input; *pos; pos++)
        {
            //字符转数字,再乘以10的n次方
            res += ((*pos)-0x30)*base;
            base *= 10;
        }
        return res;
    }

    void test3()
    {
        string input;
        cin>>input;
        int pos, base = 1, res = 0;
        //与第二题相似,区别是从尾部开始读取
        for(pos = input.length(); pos >= 1; pos--)
        {
            res += base * (input.at(pos - 1) - 'a' + 1);
            base *= 26;
        }
        cout<<res<<endl;
    }


-----------------------------

            传说中的分割线

-----------------------------

就是这些了,题目应该不难吧,考查的都是基础。最后祝愿大家能顺利进入自己心仪的实习单位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: