華為三道上機題解答

來源:互聯網
上載者:User

       華為今年筆試改為上機了,自己上機試了下,題目雖然不難,但是編程也需要注意一些細節。首先,看到題目,不要急於下手寫代碼,要先問題看明白理解對,把思路理清楚,。題目轉自一個網友liuqiqi677:http://blog.csdn.net/liuqiqi677/article/details/6755498

       昨天去參加了華為的校園招聘上機考試,題目一共三道,都比較簡單,不要求演算法效率,也不要求對所給資料的合法性作檢測,主要還是注重基礎知識的考察,和大家分享一下,希望對接下來的同學有所協助。

      1、選秀節目打分,分為專家評委和福士評委,score[] 數組裡面儲存每個評委打的分數,judge_type[] 裡儲存與 score[] 數組對應的評委類別,judge_type[i] == 1,表示專家評委,judge_type[i] == 2,表示福士評委,n表示評委總數。打分規則如下:專家評委和福士評委的分數先分別取一個平均分(平均分取整),然後,總分 = 專家評委平均分  * 0.6 + 福士評委 * 0.4,總分取整。如果沒有福士評委,則
總分 = 專家評委平均分,總分取整。函數最終返回選手得分。

            函數介面   int cal_score(int score[], int judge_type[], int n) 

      2、給定一個數組input[] ,如果數組長度n為奇數,則將數組中最大的元素放到 output[] 數組最中間的位置,如果數組長度n為偶數,則將數組中最大的元素放到 output[] 數組中間兩個位置偏右的那個位置上,然後再按從大到小的順序,依次在第一個位置的兩邊,按照一左一右的順序,依次存放剩下的數。

      例如:input[] = {3, 6, 1, 9, 7}   output[] = {3, 7, 9, 6, 1};             input[] = {3, 6, 1, 9, 7, 8}    output[] = {1, 6, 8, 9, 7, 3}

             函數介面   void sort(int input[[, int n, int output[])

      3、作業系統任務調度問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 50,使用者任務的優先順序 >= 50且 <= 255。優先順序大於255的為非法任務,應予以剔除。現有一任務隊列task[],長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。函數scheduler實現如下功能,將task[] 中的任務按照系統任務、使用者任務依次存放到 system_task[] 數組和 user_task[]
數組中(數組中元素的值是任務在task[] 數組中的下標),並且優先順序高的任務排在前面,數組元素為-1表示結束。

      例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}    system_task[] = {0, 3, 1, 7, -1}    user_task[] = {4, 8, 2, 6, -1}

             函數介面    void scheduler(int task[], int n, int system_task[], int user_task[])

解答:

#include <iostream>#include <map>#include <utility>#define N 10using namespace std;//1int cal_score(int score[],int judge_type[],int n){int avgz=0,avgd=0;int numz=0,numd=0;int i;for(i=0;i<n;i++){if(1==judge_type[i]){numz++;avgz+=score[i];}if(2==judge_type[i]){numd++;avgd+=score[i];}}if(numd!=0){return (int)( (avgz/numz)*0.6 + (avgz/numz)*0.4 ); }else return (int)(avgz/numz);}//2void sort(int input[],int n,int output[]){int i,j;//InsertSortfor(i=1;i<n;i++){int k=input[i];for(j=i;j>0 && k>input[j-1];j--)input[j]=input[j-1];input[j]=k;}//printfor(i=0;i<n;i++)cout<<input[i]<<" ";cout<<endl;int mid=n/2;output[mid]=input[0];i=mid-1;j=mid+1;for(int k=1;k<n;k++){if(k%2==1){output[i]=input[k];i--;}else{output[j]=input[k];j++;}}//printfor(i=0;i<n;i++)cout<<output[i]<<" ";cout<<endl;}//3void scheduler(int task[],int n,int system_task[],int user_task[]){map<int,int> temp;int i,j;for(i=0;i<n;i++)temp.insert(make_pair(task[i],i));map<int,int>::iterator iter=temp.begin();i=0;j=0;while(iter!=temp.end()){//cout<<iter->first<<" "<<iter->second<<" ";//++iter;if(iter->first<50)system_task[i++]=iter->second;if(iter->first>=50 && iter->first<=255)user_task[j++]=iter->second;++iter;}system_task[i]=-1;user_task[j]=-1;for(i=0;system_task[i]!=-1;i++)cout<<system_task[i]<<" ";cout<<endl;for(j=0;user_task[j]!=-1;j++)cout<<user_task[j]<<" ";cout<<endl;}int main(){int score[N]={8,9,9,10,8,8,9,7,9,9};int judge_type[N]={1,1,2,2,1,2,2,2,2,2};int s=cal_score(score,judge_type,N);cout<<"score="<<s<<endl;//2int in1[5]={3,6,1,9,7};int out1[5];sort(in1,5,out1);int in2[6]={3,6,1,9,7,8};int out2[6];sort(in2,6,out2);//3int task[9]={0, 30, 155, 1, 80, 300, 170, 40, 99} ;int system_task[9];int user_task[9];scheduler(task,9,system_task,user_task);return 0;}

編譯環境:VC6.0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.