2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(0) 收藏举报在网上看到华为在有的地方已经开始机试了,于是决定自己先编着试试。
下面是题目和自己写的代码。
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)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组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}view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<conio.h>4.5.6.7. v oid sort(int input[], int n, int output[])8. {9. int i,j;10. int k=1;11. int temp;12. int med;13. for(i=0;i<n;i++)14. for(j=0;j<n-i;j++)15. if(input[j]>input[j+1])16. {temp=input[j];input[j]=input[j+1];input[j+1]=temp;}17. if(n%2!=0)18. {19. for(i=0;i<n;i++)20. printf("%2d",input[i]);21. printf("\n");22. med=(n-1)/2;23. output[med]=input[n-1];24. for(i=1;i<=med;i++)25. {26. output[med-i]=input[n-1-k];27. output[med+i]=input[n-2-k];28. k=k+2;29.30. }31. }32. else33. {34.35. for(i=0;i<n;i++)36. printf("%2d",input[i]);37. printf("\n");38. med=n/2;39. output[med]=input[n-1];40. for(i=1;i<=med-1;i++)41. {42. output[med-i]=input[n-1-k];43. output[med+i]=input[n-2-k];44. k=k+2;45. }46. output[0]=input[0];47. }48. for(i=0;i<n;i++)49. printf("%2d",output[i]);50. printf("\n");51. }52.53.54. int main()55. {56. int a[6]={3,6,1,9,7,8};57. int b[6]={0};58. for(int i=0;i<6;i++)59. printf("%2d",a[i]);60. printf("\n");61. sort(a,6,b);62. return 0;63. }运行结果3 6 1 9 7 81 3 6 7 8 91 6 8 9 7 33、操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。
其中,系统任务的优先级< 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[])view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<malloc.h>4. #include<iostream.h>5.6. v oid scheduler1(int task[], int n, int system_task[], int user_task[])7. {8. int i;9. int j=0;10. int *p,*pp,*p_user,*pp_user;11. int index=0;12. int count,count2;13. int min=0;14. int k=0;15. p=(int*)malloc(sizeof(int)*n);16. for(i=0;i<n;i++)17. p[i]=0;18. pp=(int*)malloc(sizeof(int)*n);19. for(i=0;i<n;i++)20. pp[i]=0;21. p_user=(int*)malloc(sizeof(int)*n);22. for(i=0;i<n;i++)23. p_user[i]=0;24. pp_user=(int*)malloc(sizeof(int)*n);25. for(i=0;i<n;i++)26. pp_user[i]=0;27.28. for(i=0;i<n;i++)29. {30. if(task[i]<50)31. {32. {33. system_task[j]=task[i];34. pp[j]=i;。