昨天去參加了華為的校園招聘上機考試,題目一共三道,都比較簡單,不要求演算法效率,也不要求對所給資料的合法性作檢測,主要還是注重基礎知識的考察,和大家分享一下,希望對接下來的同學有所幫助。
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)
#include
#include
#include
#include
#definen 5
intcal_score(int score, int judge_type, int n)
else dazhong=dazhong+score[i];
}if(number==n)
else
return zongfen;
}intmain()
2、給定乙個陣列input ,如果陣列長度n為奇數,則將陣列中最大的元素放到 output 陣列最中間的位置,如果陣列長度n為偶數,則將陣列中最大的元素放到 output 陣列中間兩個位置偏右的那個位置上,然後再按從大到小的順序,依次在第乙個位置的兩邊,按照一左一右的順序,依次存放剩下的數。
例如:input = output = ; input = output =
函式介面 void sort(int input[[, int n, int output)
#include
#include
#include
void sort(intinput, int n, int output)
if(n%2!=0)
}else
output[0]=input[0];
}
for(i=0;iprintf("%2d",output[i]);
printf("\n");
}int main()
;int b[6]=;
for(int i=0;i<6;i++)
printf("%2d",a[i]);
printf("\n");
sort(a,6,b);
return 0;
}3、作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 50,使用者任務的優先順序 >= 50且 <= 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。函式scheduler實現如下功能,將task 中的任務按照系統任務、使用者任務依次存放到 system_task 陣列和 user_task 陣列中(陣列中元素的值是任務在task 陣列中的下標),並且優先順序高的任務排在前面,優先順序相同的任務按照入隊順序排列(即先入隊的任務排在前面),陣列元素為-1表示結束。
例如:task = system_task = user_task =
函式介面 void scheduler(int task, int n, int system_task, int user_task)
#include
#include
#include
#include
voidscheduler1(int task, int n, int system_task, int user_task)
int i;
int j=0;
int *p,*pp,*p_user,*pp_user;
int index=0;
int count,count2;
int min=0;
int k=0;
p=(int*)malloc(sizeof(int)*n);
for(i=0;ip[i]=0;
pp=(int*)malloc(sizeof(int)*n);
for(i=0;ipp[i]=0;
p_user=(int*)malloc(sizeof(int)*n);
for(i=0;ip_user[i]=0;
pp_user=(int*)malloc(sizeof(int)*n);
for(i=0;ipp_user[i]=0;
for(i=0;iif(task[i]<50)
system_task[j]=task[i];
pp[j]=i;
j++;
count=j;
else if(task[i]<=255)
user_task[k]=task[i];
pp_user[k]=i;
k++;
count2=k;
else task[i]=task[i];
for(i=0;iprintf("%3d",system_task[i]);
printf("\n");
for(i=0;imin=system_task[0];
for(j=1;jif(system_task[j]min=system_task[j];
p[i]=j;
system_task[p[i]]=51;
pp[count]=-1;
for(i=0;iprintf("%3d",pp[p[i]]);
printf("%3d\n",pp[count]);
for(i=0;iprintf("%4d",user_task[i]);
printf("\n");
for(i=0;imin=user_task[0];
for(j=1;jif(user_task[j]min=user_task[j];
p_user[i]=j;
user_task[p_user[i]]=256;
pp_user[count2]=-1;
for(i=0;iprintf("%4d",pp_user[p_user[i]]);
printf("%3d\n",pp_user[count2]);
int main()
int task[9]=;
int system_task[9]=;
int user_task[9]=;
scheduler1(task,9,system_task,user_task);
return 0;
第三題的這種做法的排序的過程有點看不懂,下面貼出來我自己的做法,用的是常見的冒泡法排序的修改版,沒有用指標用的是陣列,這點不太好,
#include #include #include int schedule(int task,int n,int system_task,int user_task);
int schedule(int task,int n,int system_task,int user_task)
else
}for(i=0;i=0;i--)
}for(i=n-1;i>=0;i--)
}int *p=(int *)malloc(sizeof(int)*(c+1));
int *q=(int *)malloc(sizeof(int)*(d+1));
assert(p!=null);
assert(q!=null);
for(i=0;itask[system_task[j]])}}
for(i=0;itask[user_task[j]])}}
printf("\nresult:\n");
for(i=0;i<=c;i++)
printf("\n");
for(i=0;i<=d;i++)
return 0;
}int main()
; int system_task[9]=;
int user_task[9]=;
schedule(task,9,system_task,user_task);
return 0;
}
int check_phone(char *p)
else
return 2;
}if((*p=='8')&&(*(p+1)=='6'))
else
return 3;
}else
return 1;
}int main()
華為2012校園招聘 上機考試2
1.陣列比較 20分 比較兩個陣列,要求從陣列最後乙個元素開始逐個元素向前比較,如果2個陣列長度不等,則只比較較短長度陣列個數元素。請程式設計實現上述比較,並返回比較中發現的不相等元素的個數 比如 陣列和陣列按題述要求比較,不相等元素個數為0 陣列和陣列按題述要求比較,不相等元素個數為3 要求實現函...
華為2012校園招聘 上機考試1
1 選秀節目打分,分為專家評委和大眾評委,score 陣列裡面儲存每個評委打的分數,judge type 裡儲存與 score 陣列對應的評委類別,judge type i 1,表示專家 評委,judge type i 2,表示大眾評委,n表示評委總數。打分規則如下 專家評委和大眾評委的分數先分別取...
華為機考80 108
80 字串匹配 題目要求 判斷短字串是否在長字串 現 注意 雖然題目說只會輸入兩個字串,但是不加while還是會錯,所以應該吧while設為框架 ps 字串的 in 操作,只有切片完全一致才為true,亂序false while true try x input y input flag true ...