华为面试题
2011-09-28 12:58
197 查看
//选秀节目打分,分为专家评委和大众评委,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;
}
//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;
}
相关文章推荐
- C语言面试题大汇总之华为面试题
- 华为面试题--母串中寻找子串出现的下标
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集【转】
- Java华为面试题
- 华为面试题算什么,这个背会了外企随便进
- 一套华为面试题
- 对象排序之Comparator,Comparable接口区别(华为面试题)
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
- 时钟的指针一天内会重合几次? - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题,
- 简单一道排序题,考倒多少读书人!——从华为一道面试题浅谈计算机专业在校大学生该如何学习专业课程,信心百倍挑战就业!
- 华为正规C,C++面试题及答案
- 华为的JAVA面试题及答案(部分)
- 2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集
- 解一道面试题——华为社招现场面试1:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321 。
- 那天在CSDN上看到一个网友在华为遇到的面试题是一道乘法题看似简其实并不是因为它们都超出了数据类型的范围,今天做了下加法希望对大家有所启示
- 一道华为面试题
- 华为c++面试题
- C语言面试题一——华为篇
- 语言面试题(2)——华为
- 华为的java面试题