華爲今年筆試改爲上機了,自己上機試了下,題目雖然不難,但是編程也需要注意一些細節。首先,看到題目,不要急於下手寫代碼,要先問題看明白理解對,把思路理清楚,。題目轉自一個網友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 10
using namespace std;
//1
int 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);
}
//2
void sort(int input[],int n,int output[])
{
int i,j;
//InsertSort
for(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;
}
//print
for(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++;
}
}
//print
for(i=0;i<n;i++)
cout<<output[i]<<" ";
cout<<endl;
}
//3
void 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;
//2
int 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);
//3
int 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