华为机考试题+答案

  • 格式:doc
  • 大小:45.00 KB
  • 文档页数:7

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<iostream>int cal_score(int score[], int judge_type[], int n){int i =0;int sum1=0, sum2=0;int count1=0,count2=0;int zhongfen=0;for(i =0; i<n; i++){if(1==judge_type[i]){sum1+=score[i];count1++;}else //if(2==judge_type[i]){sum2+=score[i];count2++;}}if(count2==0){zhongfen = sum1;}else{zhongfen = int ((sum1/count1)*0.6 +(sum2/count2)*0.4);}return zhongfen;}int main(){int score[]={1,1,1,1,1,1};int judge_type[] = {2,2,2,1,2,2};printf("%d", cal_score(score, judge_type, 6) );} 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[])#include<iostream>void sort(int input[], int n, int output[]){int i,j;int temp =0;for(i =0; i<n-1; i++)for(j =0; j<n-i-1; j++){if(input[j]>input[j+1]){temp = input[j];input[j] = input[j+1];input[j+1] = temp;}}if(n%2 ==0){for(i =0 ; i<n/2; i++){output[i] = input[2*i];}for(i =0; i<n/2; i++){output[n/2+i] = input[n-1-2*i];}}else{for(i=0; i<(n-1)/2; i++){output[i] = input[2*i+1];}output[(n-1)/2]= input[n-1];for(i = 0; i<(n-1)/2; i++){output[(n-1)/2+1+i] = input[n-3-2*i];}}for(i = 0 ; i<n; i++){printf("%d", output[i]);}printf("\n");}int main(){int input1[] = {3, 6, 1, 9, 7};int input2[] = {3, 6, 1, 9, 7, 8};int output1[5] = {0};int output2[6] = {0};sort( input1, 5,output1) ;sort(input2, 6, output2) ;}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}#include<iostream>struct Table{int number;int value;};void scheduler(int task[], int system_task[], int user_task[],int n){int i ;int j;struct Table temp;//struct Table table[n];//n 必需为常量struct Table *table = (struct Table *)malloc(sizeof(struct Table)*n);int system_count=0,user_count=0;for(i =0; i<n; i++){table[i].number=i;table[i].value =task[i];}for(i=0; i<n-1; i++)for(j=0; j<n-1-i; j++){if(table[j].value>table[j+1].value){temp=table[j];table[j]= table[j+1];table[j+1] = temp;}}for(i=0; i<n;i++){if(table[i].value<50){system_task[system_count] = table[i].number;system_count++;}else if(table[i].value<=250){user_task[user_count]=table[i].number;user_count++;}}system_task[system_count]=-1;user_task[user_count]= -1;free(table);}int main(){int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99};int n=9;for(int i=0,count_sys=0,count_user=0;i<9;i++){if(task[i]<50)count_sys++;else if(task[i]<=255)count_user++;elsecontinue;}int *system_task=(int *)malloc(count_sys*sizeof(int)+4);int *user_task=(int *)malloc(count_user*sizeof(int)+4);scheduler(task, system_task, user_task,9);int *p = system_task;int *q = user_task;printf("%d%d\n", count_sys,count_user);for(i=0;i<count_sys+1;i++){printf("%d", system_task[i]);}printf("\n");for(i=0;i<count_user+1;i++){printf("%d", user_task[i]);}free(system_task);free(user_task);}。