2016华为校招上机笔试练习题

1、最高分是多少

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF){
        int *score = (int*)malloc(sizeof(int)*n);
        int res[5000];
        int cnt = 0;
        for(int i=0; i<n; i++)
            scanf("%d",&score[i]);
        char t;
        int a=0,b=0;
        while(m--){
            scanf("%c",&t);
            if(t == ‘\n‘)
                scanf("%c",&t);
            scanf("%d %d",&a,&b);
            if(t == ‘Q‘){
                int max = 0;
                for(int i=a;i<=b;i++){
                    if(score[i] > max)
                        max = score[i];
                }
                res[cnt++] = max;
            }else
                score[a] = b;
        }
        for(int i=0; i<cnt; i++)
            printf("%d\n",res[i]);
        free(score);
    }
    return 0;
}

2、简单错误记录

#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Log{
    string path;
    int row;
    int count;
};
static vector<Log> vec;
void writeLog(Log &lg){
    for(int i=0;i<vec.size();i++){
        if(vec[i].path == lg.path && vec[i].row == lg.row){
            Log tmp = vec[i];
            vec.erase(vec.begin()+i);
            tmp.count ++;
            vec.push_back(tmp);
            return ;
        }
    }
    lg.count = 1;
    vec.push_back(lg);
    if(vec.size() > 8)
        vec.erase(vec.begin());
}
void doLog(){
    for(int i=0; i<vec.size(); i++){
        Log lg = vec[i];
        int len = lg.path.size(),cnt = 0;
        for(int i=len-1; i>=0 && cnt<16; i--){
            if(lg.path[i] == ‘\\‘)
                break;
            else{
                cnt ++;
            }
        }
        lg.path = lg.path.substr(len-cnt,cnt);
        vec[i] = lg;
    }
}

int main(){
    Log lg;
    while(cin>>lg.path>>lg.row){
        lg.path = "E:\\hello";
        lg.row = 45;
            writeLog(lg);
    }
    doLog();
    for(int i=0; i<vec.size(); i++)
        cout<<vec[i].path<<" "<<vec[i].row<<" "<<vec[i].count<<endl;
    return 0;
}

3、扑克牌大小

#include <iostream>
#include <string>
#include <vector>
using namespace std;

//个子 对子 顺子 三个 四个 对王
static int judgeType(vector<char> &vec,int *value){
    if(vec.size()==2){
        if(vec[0]==‘r‘ || vec[0]==‘R‘)
            return 6;
        else{
               *value=vec[0];
               return 2;
        }
    }
    *value=vec[0];
    return vec.size();
}

static void print(vector<char> &vec){
    if(vec[0] == ‘r‘)
        cout<<"joker";
    else if(vec[0] == ‘R‘)
        cout<<"JOKER";
    else if(vec[0] == ‘T‘)
            cout<<"10";
    else
        cout<<vec[0];
    for(int i=1; i<vec.size(); i++){
        if(vec[i] == ‘r‘)
            cout<<" joker";
        else if(vec[i] == ‘R‘)
            cout<<" JOKER";
        else if(vec[i] == ‘T‘)
            cout<<" 10";
        else
            cout<<" "<<vec[i];
    }
    cout<<endl;
}
bool comp(char a,char b){
    switch(a){
    case ‘T‘: a = ‘a‘;break;
    case ‘J‘: a = ‘b‘;break;
    case ‘Q‘: a = ‘c‘;break;
    case ‘K‘: a = ‘d‘;break;
    case ‘A‘: a = ‘e‘;break;
    case ‘r‘: a = ‘f‘;break;
    case ‘R‘: a = ‘g‘;break;
    }
    switch(b){
    case ‘T‘: b = ‘a‘;break;
    case ‘J‘: b = ‘b‘;break;
    case ‘Q‘: b = ‘c‘;break;
    case ‘K‘: b = ‘d‘;break;
    case ‘A‘: b = ‘e‘;break;
    case ‘r‘: b = ‘f‘;break;
    case ‘R‘: b = ‘g‘;break;
    }
    return a>b;
}

int main(){
    string str;
    while(getline(cin,str)){
        int len = str.size();
        vector<char> vec1,vec2;
        bool flag = false;
        for(int i=0; i<len; i++){
            if(str[i] == ‘-‘){
                flag = 1;
                continue;
            }
            else if(isspace(str[i]))
                continue;
            if(flag){
                if(str[i]==‘j‘)    {vec1.push_back(‘r‘);i=i+4;}
                else if(str[i]==‘J‘ && i==len-1){vec1.push_back(‘J‘);}
                else if(str[i]==‘J‘ && str[i+1]==‘O‘){vec1.push_back(‘R‘);i=i+4;}
                else if(str[i]==‘1‘) {vec1.push_back(‘T‘);i=i+1;}
                else vec1.push_back(str[i]);
            }else{
                if(str[i]==‘j‘)    {vec2.push_back(‘r‘);i=i+4;}
                else if(str[i]==‘J‘ && i==len-1){vec2.push_back(‘J‘);}
                else if(str[i]==‘J‘ && str[i+1]==‘O‘){vec2.push_back(‘R‘);i=i+4;}
                else if(str[i]==‘1‘) {vec2.push_back(‘T‘);i=i+1;}
                else vec2.push_back(str[i]);
            }
        }
        int value1 = 0,value2 = 0;
        int type1 = judgeType(vec1,&value1);
        int type2 = judgeType(vec2,&value2);
        if(type1 == type2){
            if(comp(value1,value2)) print(vec1);
            else print(vec2);
        }else{
            if((type1==4 || type1==6) && type2<6) print(vec1);
            else if((type2==4 || type2==6) && type1<6) print(vec2);
            else cout<<"ERROR"<<endl;
        }
    }

    return 0;
}

  华为上机题,对算法本身要求并不高,关键是要注意细节。华为OJ平台感觉做的很不好,直接显示错误或正确,一点错误提示都没有。最坑的就是每题只有5次提交机会,搞的大家都不敢轻易提交了。

  版权所有,欢迎转载,转载请注明出处。

时间: 2024-11-09 00:53:39

2016华为校招上机笔试练习题的相关文章

华为校招上机笔试试题(A卷)——java实现

华为校招上机笔试试题(A卷)--java实现 编程题:A1.最小长方形, A2. 判断一个数字中是否包含两个相同的子串, A3. 取石子游戏. A1.最小长方形 java代码: import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MinRectangle { public static void main(String arg[]){ List<Integer> ld

2016华为校招机试记录

3道题,分值100/200/300,都不算难 1.输入一个字符串,输出该字符串按照每个字母与'U'距离的绝对值排序的新字符串(若相同,按照原字符串中的位置关系排列) 核心就是写一个sort的cmp函数,没什么难度 2.续1s:给定一个字符串类型的时间(2016/09/13 13:13:13),输出下一秒的时间 考虑好闰年情况依次进位即可 3.仿自动售货机:给一个字符串(形如p 1,p 5,p 5,b A1,b A3,b A2)和执行前货箱.钱箱的初始状态,p k(1/2/5)表示塞入一张k元纸币

2017 校招网上笔试题目

2017 校招网上笔试题目 做了一下某大厂的笔试的题目 1. 一个表, visit(cookie_id, area1, area2, date) 给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长.一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有.反正蒙了一个.没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率. 2. 给了几个条件,判断你的名次.又是球赛的问题,考查你的推理能力. 3. en

2016华为开发者大赛沙龙北京站,趁“热”来袭

2016华为开发者大赛(HUAWEI Developer Challenge 2016)是华为公司面向全国开发者的大型软件竞赛,致力于通过华为全系产品领域的能力开放和全方位的开发支持服务,寻找创新的种子并共同孵化出创新的解决方案以推向华为优势市场,帮助开发者实现业务创新落地,成就开发者创新梦想.竞赛内容涵盖云计算.IoT.Openlife.CaaS.聚合运营.移动开放工厂.大数据.BYOD.SDN.eLTE.企业通信.OpenIES和敏捷网络等华为开发者社区13个他们认为最有商业价值的领域.为全

汇聚创新 共创未来---记2016华为开发者大赛沙龙深圳站

2016华为开发者大赛(HUAWEI Developer Challenge 2016)是华为公司面向全国开发者的大型软件竞赛,致力于通过华为全系产品领域的能力开放和全方位的开发支持服务,寻找创新的种子并共同孵化出创新的解决方案以推向华为优势市场,帮助开发者实现业务创新落地,成就开发者创新梦想. 7月10日,华为开发者大赛沙龙深圳站开启.深圳站主要聚焦华为Universe大数据.华为IoT链接管理平台.CloudOpera IES.Digital inCloud.集成通信能力.华为OMF平台及A

2014年七月华为校招机试题目--最难的一道, 呵呵!

今天百无聊赖之时, 漫心看到14年的华为校招机试题目, 一共三道, 前两道皆是平平, 第三道却柳暗花明, 让人眼前一亮. 咋一看, 饶有趣味, 看似平淡无奇, 然而却玄机颇深(对我这种弱渣而言).(不过对于ACMer, 好像应该用基础算法, 就能解决!) (然而我也只会基础的算法!!忏愧的紧!!!).如果有幸被大神看到, 能指点我一两招, 不胜感激!  下面是题目和我的详细题解思路(可供巨巨一笑!嘿嘿!). 2014年七月华为校招机试题目: 第三题: 输入一个正整数X,在下面的等式左边的数字之间

华为2014字符串笔试 2

通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数:  void string

2015年华为校招机试题和代码实现(分解字符串,拼音转数字,去除重复字符并排序,等式变换)

再来一套2015年的华为机试题. 第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345678","90000000" 分析思路: 容易题 1.获得字符串的长度length后,判断与要输出位数N的大小,大于N的话,直接printf前N位字符,然

华为2014字符串笔试 1

通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串“abacacde”过滤结果为“abcde”. 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); [输入] pInputStr:  输入字符串             lInputLen:  输入字符串长度          [输出] pOu