现在的位置: 首页 > 综合 > 正文

华为面试题

2018年02月09日 ⁄ 综合 ⁄ 共 1832字 ⁄ 字号 评论关闭

 

 

//选秀节目打分,分为专家评委和大众评委,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){

float sum1,sum2;

int ave1,ave2;

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

if (judge_type[i]==1)

sum1=sum1+score[i];

if (judge_type[i]==2)

sum2=sum2+score[i];

}

ave1=(int)sum1/n;

ave2=(int)sum2/n;

if (sum2==0)

double sum=sum1;

else

sum=sum1*0.6+sum2*0.4;

return sum;

}

 

 

//给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,

//如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,

//然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数

 

 

void swap(int &x, int &y)

{

int temp = x;

x = y;

y = temp;

}

 

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

{

for (int i = 0; i < n-1; i++) // 冒泡排序,从大到小

{

for (int j = 0; j < n-1-i; j++)

{

if (input[j] < input[j+1])

{

swap(input[j], input[j+1]);

}

}

}

 

int mid = n/2; // 计算中间位置

int left = mid-1; // 左下标

int right = mid+1; // 右下标

int cnt = 0;

output[mid] = input[cnt++];

while (cnt < n)

{

if (cnt < n)

{

output[left--] = input[cnt++];

}

if (cnt < n)

{

output[right++] = input[cnt++];

}

}

}

 

 

//操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。

//其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。

//优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,

//task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,

//将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中

//(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列

//(即先入队的任务排在前面),数组元素为-1表示结束。

 void scheduler(int task[], int n, int system_task[], int user_task[])

{

int j,k=0;//分别指向系统任务和用户任务的标记

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

{

if(task[i]<50)

{//插入法优先级由高到低插入系统任务中

for(int cj=j-1;cj>=0&&task[i]<system_task[cj];cj--)

{//依次后退

system_task[cj]=system_task[cj+1];

}

system_task[cj+1]=task[i];

j++;

}

else if(task[i]>=50&&task[i]<=255)

{//插入法优先级由高到低插入用户任务中

for(int ck=k-1;ck>=0&&task[i]<user_task[ck];ck--)

{//依次后退

user_task[ck]=user_task[ck+1];

}

user_task[ck+1]=task[i];

k++;

}

system_task[i]=-1;

user_task[i]=-1;

}

 

【上篇】
【下篇】

抱歉!评论已关闭.