华为 2012 技术类
技术研发
本套题共23题,并含有参考答案
题目详情
第21题

选秀节目打分,分为专家评委和大众评委,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<stdio.h>

#include<string.h>

#include<iostream.h>

#include<conio.h>

#define N 5

 

int cal_score(int score[], int judge_type[], int n) 

{

int expert=0;

    int dazhong=0;

int zongfen=0;

int i;

int number=0;


for(i=0;i<N;i++)

{

if(judge_type[i]==1)

{

expert=expert+score[i];

number++;

}

else dazhong=dazhong+score[i];

}

if(number==N)

{

zongfen=(int)(expert/N);

}

else

    {

expert=(int)(expert/number);

dazhong=(int)(dazhong/(N-number));

zongfen=int(0.6*expert+0.4*dazhong);

}

return zongfen;

}

int main()

{

int score[N];

int judge_type[N];

int numberlast=0;

int i;

printf("please input the %d score:\n",N);

for(i=0;i<N;i++)

scanf("%d",&score[i]);

printf("please input the level(1:expert,2:dazhong)\n");

for(i=0;i<N;i++)

scanf("%d",&judge_type[i]);

numberlast=cal_score(score,judge_type,N);

printf("the last score is %d\n",numberlast);

return 0;

}



第22题

给定一个数组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}


#include<stdio.h>

#include<string.h>

#include<conio.h>

void sort(int input[], int n, int output[])

{

int i,j;

int k=1;

int temp;

int med;

for(i=0;i<n;i++)

for(j=0;j<n-i;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;i++)

printf("%2d",input[i]);

printf("\n");

med=(n-1)/2;

output[med]=input[n-1];

for(i=1;i<=med;i++)

{

output[med-i]=input[n-1-k];

output[med+i]=input[n-2-k];

k=k+2;


}

}

else

{


for(i=0;i<n;i++)

printf("%2d",input[i]);

printf("\n");

med=n/2;

output[med]=input[n-1];

for(i=1;i<=med-1;i++)

{

output[med-i]=input[n-1-k];

output[med+i]=input[n-2-k];

k=k+2;

}

output[0]=input[0];    

}

for(i=0;i<n;i++)

printf("%2d",output[i]);

printf("\n");

}

int main()

{

int a[6]={3,6,1,9,7,8};

int b[6]={0};

for(int i=0;i<6;i++)

printf("%2d",a[i]);

printf("\n");

sort(a,6,b);

return 0;

}



第23题

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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<stdio.h>

#include<string.h>

#include<malloc.h>

#include<iostream.h>

 

void scheduler1(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;i<n;i++)

p[i]=0;

pp=(int*)malloc(sizeof(int)*n);

for(i=0;i<n;i++)

pp[i]=0;

p_user=(int*)malloc(sizeof(int)*n);

for(i=0;i<n;i++)

p_user[i]=0;

pp_user=(int*)malloc(sizeof(int)*n);

for(i=0;i<n;i++)

pp_user[i]=0;


for(i=0;i<n;i++)

{

if(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;i<count;i++)

printf("%3d",system_task[i]);

printf("\n");



for(i=0;i<count;i++)

{

min=system_task[0];

for(j=1;j<count;j++)

{


if(system_task[j]<min)

{

min=system_task[j];

p[i]=j;  

}


}

system_task[p[i]]=51;

}


    pp[count]=-1;

for(i=0;i<count;i++)

printf("%3d",pp[p[i]]);

printf("%3d\n",pp[count]);



/***********************************************************/


for(i=0;i<count2;i++)

printf("%4d",user_task[i]);

printf("\n");


for(i=0;i<count2;i++)

{

min=user_task[0];

for(j=1;j<count2;j++)

{


if(user_task[j]<min)

{

min=user_task[j];

p_user[i]=j;  

}


}

user_task[p_user[i]]=256;

}


    pp_user[count2]=-1;

for(i=0;i<count2;i++)

printf("%4d",pp_user[p_user[i]]);

printf("%3d\n",pp_user[count2]);


}

 

int main()

{

int task[9]={0, 30, 155, 1, 80, 300,170, 40, 99};

int system_task[9]={0};

int user_task[9]={0};

scheduler1(task,9,system_task,user_task);

return 0;

}

 



共有 23 道题目