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\n",rec_size);
            for(i=begin;i<=end;i++){
                for(j=0;j<tar.rec[i].size();j++)
                    printf("%d %d\n",i,tar.rec[i][j]);
        }
    }

    system("pause");
    
    return  0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM