zoukankan      html  css  js  c++  java
  • huawei校招测试题

     三道题两小时。

    第一题,圈住所有点的长方形,很简单略过。

    第二题:奇偶排序。

    奇偶排序
    描述:

    输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序。

    运行时间限制: 10 Sec
    内存限制: 128 MByte
    输入:

    输入一串乱序的数字

    输出:

    输出排序后的数字

    样例输入:
    12 34 5 7 92 3 8
    样例输出:
    7 5 3 8 12 34 92
    答案提示:

     第三题:记账系统。

    饭圈的记账系统
    描述:

    W公司食堂因为装修需要停业一个月,员工们用餐不方便,热心的秘书MM组织了一个饭圈,在公司附近一家经济实惠的饭店解决用餐问题。饭圈采用会员制,会员的用餐费用由秘书MM负责记录。请帮助秘书MM完成这个月饭圈的记账系统: 

    1)管理会员,允许会员加入或者退出饭圈 
    2)记录会员的每次就餐信息,方便会员进行查询 
    3)自动统计会员就餐产生的消费总额,方便秘书MM进行结账 

    一行一条命令,不存在多个命令位于一行的情况。命令语法(各表达式之间使用1个空格隔开,测试用例确保1个空格): 

    command [para]

      测试用例保证输入命令合法,如测试用例保证参数个数正确,参数都是正整数。

    ca

    1、增加会员

    功能:增加饭圈会员

    命令格式:

    AddMember MemberId

    输入:MemberId    会员ID

    输出:成功,不输出;失败(如会员ID已存在),输出"AddMember false"。

    2、删除会员

    功能:删除饭圈会员,包括该会员所有消费记录

    命令格式:

    DelMember MemberId

    输入:MemberId 会员ID

    输出:无

    3、餐费记录

    功能:餐费记录,允许会员在同一天有多次餐费记录

    命令格式:

    RecordCost Date MemberNum MemberIdArray AverageCost

    输入:Date      就餐日期,取值范围为1~31 

          MemberNum       就餐人数

          MemberIdArray   就餐的会员ID数组,用例保证MemberIdArray中不存在重复的ID 

          AverageCost       人均费用

    输出:成功,不输出;失败(如日期错误,会员ID不存在等),输出"RecordCost false"。

    注意:如果失败,该次操作的所有数据都不能录入。例如就餐日期错误,就餐的会员ID数组里面的某个ID是不存在的ID,该次操作都无效。

    4、 查询餐费,排序输出

    功能:查询指定日期内各个会员的餐费总额,按照会员ID从小到大排序输出

    命令格式:

    SortTotalCost BeginDate EndDate

    输入:

          BeginDate   开始日期,包括BeginDate本身,取值范围为1~31 

          EndDate     结束日期,包括EndDate本身,取值范围为1~31 

    输出:

          MemberNum   BeginDate至EndDate之间有消费记录的会员总数

          CostArray   各会员的餐费总额(会员ID  餐费总额,一个空格隔开)

    说明: 测试用例保证EndDate大于等于BeginDate 

    5、查询指定会员的餐费详单

    功能:查询指定会员的餐费详单

    命令格式:

    QueryDetailsOfSingleMember MemberId BeginDate EndDate

    输入:

          MemberId    会员ID

          BeginDate   开始日期,包括BeginDate本身,取值范围为1~31

          EndDate     结束日期,包括EndDate本身,取值范围为1~31

    输出: 

          RecordNum          BeginDate至EndDate期间实际产生的餐费记录数 

          CostDetailsArray   餐费详单(日期 餐费,一个空格隔开),按照餐费记录的日期从小到大按序输出,如果存在一天内多次消费的,同一天的记录按照餐费录入顺序输出。

    说明: 测试用例保证EndDate大于等于BeginDate

    运行时间限制: 无限制
    内存限制: 无限制
    输入:

    多行命令

    输出:

    命令执行的结果 

    样例输入:
    AddMember 0
    AddMember 0
    AddMember 1
    AddMember 2
    RecordCost 1 2 0 1 10
    RecordCost 1 2 1 2 20
    RecordCost 2 2 1 2 20
    SortTotalCost 1 2
    QueryDetailsOfSingleMember 0 1 2
    样例输出:
    AddMember false
    3
    0 10
    1 50
    2 40
    1
    1 10
    答案提示:

     第二题代码,有一个用例没通过:

    #define LOCAL
    #include<iostream>
    #include<cstdio>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    
    int main(){
        #ifdef LOCAL
            freopen("in.txt","r",stdin);
        #endif
        
        long int x,i,a=0,b=0,an[1001],bn[1001]; 
        while(scanf("%d",&x)!=EOF){
             if(x%2==1)
                 an[a++]=x;
             else
                 bn[b++]=x;
    
        }
        sort(an,an+a);
        sort(bn,bn+b);
        for(i=a-1;i>=0;i--)
            printf("%d ",an[i]);
        for(i=0;i<b;i++)
            printf("%d ",bn[i]);
        system("pause");
        
        return  0;
    }

     第三题代码,写完了,但有bug,编译没通过。

    //#define LOCAL
    #include<iostream>
    #include<cstdio>
    #include <stdlib.h>
    #include <algorithm>
    #include <map>
    #include <vector>
    #include<cstring>
    #include<string>
    using namespace std;
    
    struct member{
        int id;
        vector<int> rec[31];
        int tol[31];
    };
    map<int,int> mid,res;
    member n_member;
    vector<member> x;
    int indx=0;
    
    int main(){
        #ifdef LOCAL
            freopen("in.txt","r",stdin);
        #endif
    
        int a,n,i,j,per,tar,rec_size,date,begin,end,rec[10000];
        char tmp[20];
        while(scanf("%s",tmp)!=EOF){
            if(tmp[0]=='A'){
                scanf("%d",&a);
                if ( mid.find(a)==mid.end() )
                    printf("AddMember false");
                else{
                    mid[a]=indx++;
                    n_member=new member;
                    n_member.id=a;
                    for(i=0;i<31;i++)
                        n_member.tol[i]=0;
                    x.push_back(n_member);
                }
            }
            if(tmp[0]=='R'){
                scanf("%d",&date);    
                scanf("%d",&n);    
                for(i=0;i<n;i++)
                    scanf("%d",&rec[i]);
                scanf("%d",&per);
                for(i=0;i<n;i++){
                    x[mid[rec[i]]].rec[date].push_back(per);
                    x[mid[rec[i]]].tol[date] += per;
                }
            }
            if(tmp[0]=='S'){
                scanf("%d%d",&begin,&end);
                for(i=0;i<x.size();i++){
                    res[x[i].id]=0;
                    for(j=begin;j<=end;j++)
                        res[x[i].id] += x[i].tol[j];
                }
                 for (iterator iter = res.begin(); iter != res.end(); ++iter) {
                     cout << *iter << endl; }  
            }
            if(tmp[0]=='Q'){
                scanf("%d%d%d",&tar,&begin,&end);
                rec_size=0;
                tar=x[mid[tar]];
                for(i=begin;i<=end;i++){
                    rec_size += tar.tol[i].size();
                }
                printf("%d
    ",rec_size);
                for(i=begin;i<=end;i++){
                    for(j=0;j<tar.rec[i].size();j++)
                        printf("%d %d
    ",i,tar.rec[i][j]);
            }
        }
    
        system("pause");
        
        return  0;
    }
  • 相关阅读:
    Windows的本地时间(LocalTime)、系统时间(SystemTime)、格林威治时间(UTCTime)、文件时间(FileTime)之间的转换
    VS2008驱动开发环境配置
    delete和delete[]的区别
    手动加载NT式驱动(非工具)修改注册表实现
    结构体的内存空间分配原理
    NT式驱动的卸载
    NT式驱动的安装
    struct tm>time() localtime() gmtime()
    64位驱动数字签名
    SQL Server 数据库错误修改
  • 原文地址:https://www.cnblogs.com/aezero/p/4601985.html
Copyright © 2011-2022 走看看