zoukankan      html  css  js  c++  java
  • 华为2016校园招聘上机笔试题

    老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

    输入描述:
    输入包括多组测试数据。
    每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
    学生ID编号从1编到N。
    第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
    接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
    当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
    输出描述:
    对于每一次询问操作,在一行里面输出最高成绩.
    5 7
    1 2 3 4 5
    Q 1 5
    U 3 6
    Q 3 4
    Q 4 5
    U 4 5
    U 2 9
    Q 1 5
    
    
    
    输出例子1:
    5
    6
    5
    9
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    const int maxn=30005;
    int stu[maxn];
    int main(){
        //freopen("in.txt","r",stdin);
        int N,M;
        char ch;
        int a,b;
        while(scanf("%d%d",&N,&M)==2){
            for(int i=1;i<=N;i++){
                scanf("%d",&stu[i]);
            }
            while(M--){
                scanf(" %c%d%d",&ch,&a,&b);
                if(ch=='U')
                    stu[a]=b;
                else{
                    if(a>b)
                    swap(a,b);
                    int maxscore=stu[a];
                    for(int i=a+1;i<=b;i++){
                        maxscore=max(maxscore,stu[i]);
                    }
                    printf("%d
    ",maxscore);
                }
            }
        }
        return 0;
    } 
    [编程题]简单错误记录
    开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
    处理:
    1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
    2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
    3.输入的文件可能带路径,记录文件名称不能带路径

    输入描述:
    一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
    文件路径为windows格式
    如:E:V1R2productfpgadrive.c 1325

    输出描述:
    将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 
    结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。
    如果超过8条记录,则只输出前8条记录.
    如果文件名的长度超过16个字符,则只输出后16个字符

    输入例子1:
    E:V1R2productfpgadrive.c 1325
    

    输出例子1:
    fpgadrive.c 1325 1
    

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    struct rec{
        public:
        string pathway;
        string filename;
        int line;
        int num;
    };
    
    int main(){
        
        vector<rec*>Err;
        string pathway;
        string filename;
        int line;
        //记录
        while(cin>>pathway>>line){
            filename=pathway.substr(pathway.find_last_of('\')+1);                                            
            bool exist=false;//记录是否已存在;
            
            for(int i=0;i<Err.size();i++)
            {
                if( filename==(Err[i]->filename) && line==(Err[i]->line))
                {
                    exist=true;
                    Err[i]->num = Err[i]->num+1;
                    break;
                }
            }//记录已存在则更新该记录;
            
            if(exist==false){
                rec* err=new rec();
                err->filename=filename;
                err->line=line;
                err->num=1;
                Err.push_back(err);
            }//记录不存在则保存该记录;
            
        }
       //排序记录;使用冒泡排序
        for(int i=0;i<Err.size();i++){
            for(int j=Err.size()-1;j>i;j--){
                if(Err[j]->num>Err[j-1]->num){
                    string filename=Err[j]->filename;
                    int line=Err[j]->line;
                    int num=Err[j]->num;
                    
                    Err[j]->filename=Err[j-1]->filename;
                    Err[j]->line    =Err[j-1]->line;
                    Err[j]->num     =Err[j-1]->num;
                    
                     Err[j-1]->filename=filename;
                     Err[j-1]->line    =line;
                     Err[j-1]->num     =num;
                }
            }
        }
        
        //输出记前8条记录
        for(int i=0;i<Err.size()&&i<8;i++){
            if(Err[i]->filename.length()>16){
                cout<<Err[i]->filename.substr(filename.length()-16)<<" "
                    <<Err[i]->line<<" "<<Err[i]->num<<endl;
            }
            else{ cout<<Err[i]->filename<<" "
                    <<Err[i]->line<<" "<<Err[i]->num<<endl;}
        }
        
    }

    [编程题]扑克牌大小

    扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)
    3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
    输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER
    请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR

    基本规则:
    (1)输入每手牌可能是个子,对子,顺子(连续5张),三个,炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
    (2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子)
    (3)大小规则跟大家平时了解的常见规则相同,个子,对子,三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
    (4)输入的两手牌不会出现相等的情况。

    答案提示:
    (1)除了炸弹和对王之外,其他必须同类型比较。
    (2)输入已经保证合法性,不用检查输入是否是合法的牌。
    (3)输入的顺子已经经过从小到大排序,因此不用再排序了.


    输入描述:
    输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。

    输出描述:
    输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

    输入例子1:
    4 4 4 4-joker JOKER
    

    输出例子1:
    joker JOKER
    #include <string>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    void biger_one();
    int main(){
        biger_one();
        
    }
    void biger_one()
    {
        string s;
        getline(cin, s);
        string::size_type pos = s.find("joker JOKER");
        //只要有对王,大手牌一定是这个
        if (pos != string::npos)
        {
            cout << "joker JOKER" << endl;
            return;
        }
     
        //将两手牌按照-划分
        int mid = s.find('-');
     
        //前mid个是第一手牌,后s.size-mid个是第二手牌
        string s1 = s.substr(0,mid);
        string s2 = s.substr(mid+1);
     
        //计算两手牌空格个数
        int count1 = count(s1.begin(), s1.end(), ' ');
        int count2 = count(s2.begin(), s2.end(), ' ');
     
        //拿到每一手牌的第一张牌
        string first1 = s1.substr(0, s1.find(' '));
        string first2 = s2.substr(0, s2.find(' '));
     
        string compare("12345678910JQKA2joker JOKER");
     
        //如果两手牌空格数一样,说明是同一类牌,那么第一张大的就大的
        if (count1 == count2)
        {
            if (compare.find(first1) > compare.find(first2))
            {
                cout << s1 << endl;
            }
            else
            {
                cout << s2 << endl;
            }
        }
        else//说明其中一方有炸弹
        {
            if (count1 == 3)
            {
                cout << s1 << endl;
            }
            else if (count2 == 3)
            {
                cout << s2 << endl;
            }
            else
            {
                cout << "ERROR" << endl;
            }
        }
    }
  • 相关阅读:
    如何理解volatile关键字
    Spring 4+JMS+ActiveMQ Example with Annotations
    Spring MVC如何获得客户端IP地址
    PDFBox –如何读取PDF的内容
    Spring MVC 使用Ehcache作为缓存的例子
    自定义了一个data table控件
    Linux基本配置
    位操作学习
    QT——QPainter类详解
    QT——设计文件的和控制类的关联问题
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/13268684.html
Copyright © 2011-2022 走看看