XXXX届华为校园招聘上机考试题.docx
《XXXX届华为校园招聘上机考试题.docx》由会员分享,可在线阅读,更多相关《XXXX届华为校园招聘上机考试题.docx(17页珍藏版)》请在冰豆网上搜索。
XXXX届华为校园招聘上机考试题
XXXX届华为校园招聘上机考试题
分类:
华为预备2011-09-0815:
10281人阅读评论(0)收藏举报
在网上看到华为在有的地点差不多开始机试了,因此决定自己先编着试试。
下面是题目和自己写的代码。
1、选秀节目打分,分为专家评委和大众评委,score[]数组里面储备每个评委打的分数,judge_type[]里储备与score[]数组对应的评委类不,judge_type[i]==1,表示专家评委,judge_type[i]==2,表示大众评委,n表示评委总数。
打分规则如下:
专家评委和大众评委的分数先分不取一个平均分(平均分取整),然后,总分=专家评委平均分 * 0.6+大众评委*0.4,总分取整。
如果没有大众评委,则总分=专家评委平均分,总分取整。
函数最终返回选手得分。
函数接口 intcal_score(intscore[],intjudge_type[],intn)
viewplaincopytoclipboardprint?
#include
#include
#include
#include
#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 {
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 scanf("%d",&score[i]);
printf("please input the level(1:
expert,2:
dazhong)\n");
for(i=0;i scanf("%d",&judge_type[i]);
numberlast=cal_score(score,judge_type,N);
printf("the last score is %d\n",numberlast);
return 0;
}
运行结果分析:
pleaseinputthe5score:
9080878991
pleaseinputthelevel(1:
expert,2:
dazhong)
12111
thelastscoreis85
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}
viewplaincopytoclipboardprint?
#include
#include
#include
void sort(int input[], int n, int output[])
{
int i,j;
int k=1;
int temp;
int med;
for(i=0;i for(j=0;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 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 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 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;
}
运行结果
361978
136789
168973
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}
函数接口 voidscheduler(inttask[],intn,intsystem_task[],intuser_task[])
viewplaincopytoclipboardprint?
#include
#include
#include
#include
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 p[i]=0;
pp=(int*)malloc(sizeof(int)*n);
for(i=0;i pp[i]=0;
p_user=(int*)malloc(sizeof(int)*n);
for(i=0;i p_user[i]=0;
pp_user=(int*)malloc(sizeof(int)*n);
for(i=0;i pp_user[i]=0;
for(i=0;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 printf("%3d",system_task[i]);
printf("\n");
for(i=0;i {
min=system_task[0];
for(j=1;j {
if(system_task[j] {
min=system_task[j];
p[i]=j;
}
}
system_task[p[i]]=51;
}
pp[count]=-1;
for(i=0;i printf("%3d",pp[p[i]]);
printf("%3d\n",pp[count]);
/***********************************************************/
for(i=0;i printf("%4d",user_task[i]);
printf("\n");
for(i=0;i {
min=user_task[0];
for(j=1;j {
if(user_task[j] {
min=user_task[j];
p_user[i]=j;
}
}
user_task[p_user[i]]=256;
}
pp_user[count2]=-1;
for(i=0;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;
}
运行结果:
030 140
0 3 1 7-1
155 80170 99
4 8 2 6-1
2012华为校园聘请机试(成都)-1
第一道确实是讲算分数的咨询题,去掉一个最高分一个最低分,求平均分
viewplaincopytoclipboardprint?
#include
float avescore(float score[],int n)
{
float min=0;
float max=0;
int minindex=0;
int maxindex=0;
float sum=0;
min=score[0];
for(int i=0;i if(score[i] {
min=score[i];
minindex=i;
}
score[minindex]=0;
max=score[0];
for(i=0;i if(score[i]>max)
{
max=score[i];
maxindex=i;
}
score[maxindex]=0;
for(i=0;i sum+=score[i];
sum=sum/(n-2);
return sum;
}
void main()
{
float score[6]={70,80,90,98,87,86};
float lastscore;
lastscore=avescore(score,6);
printf("the last score is :
%5.2f\n",lastscore);
}
运行结果:
thelastscoreis:
85.75
2012华为校园聘请机试(成都)-2
分类:
华为预备2011-09-0822:
23324人阅读评论
(2)收藏举报
第二道:
对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直截了当放到数组中。
-------------------思路:
先进行奇偶判定,得到奇数和偶数数组。
然后对两数组排序,进行长度判定,最后组织数据。
viewplaincopytoclipboardprint?
#include
#include
void jiou(int a[],int n)
{
int *p1;
int *p2;
int i,j;
int k=0;
int kk=0;
int count1=0;
int count2=0;
int temp;
int temp2;
int m=0;
p1=(int*)malloc(sizeof(int)*n);
p2=(int*)malloc(sizeof(int)*n);
for(i=0;i {
p1[i]=0;
p2[i]=0;
}
for(i=0;i {
if((a[i]%2)!
=0)
{p2[kk++]=a[i];}
else
{p1[k++]=a[i];}
}
count1=k;
count2=kk;
for(i=0;i printf("%3d",p2[i]);
printf("\n");
for(i=0;i for(j=0;j if(p2[j]>p2[j+1])
{temp2=p2[j];p2[j]=p2[j+1];p2[j+1]=temp2;}
for(i=0;i printf("%3d",p2[i]);
printf("\n");
for(i=0;i printf("%3d",p1[i]);
printf("\n");
for(i=0;i for(j=0;j if(p1[j] {temp=p1[j];p1[j]=p1[j+1];p1[j+1]=temp;}
for(i=0;i printf("%3d",p1[i]);