华为校园招聘上机考试题目

第一题和答案

题目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 "stdafx.h"
#include
#include
using namespace std;
int cal_score(int score[], int judge_type[], int n);
int _tmain(int argc, _TCHAR* argv[])
{

intfenshu;
int score[]={100,89,90,11,10};
int judge_type[]={1,2,1,2,1};
int n=5;
fenshu=cal_score(score,judge_type,n);
cout < system("pause");
}


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

int i,zuizhongave;
double yuanshiave;
double zhuanjiaave,dazhongave;
int zhuanjiasum=0;
int zhuanjiashu=0;
int dazhongsum=0;
int dazhongshu=0;
for (i=0;i {
if (judge_type[i]=1)
{
zhuanjiasum+=score[i];
zhuanjiashu++;
}

//这里用else if 比用if 效率要高
else if (judge_type[i]=2)
{
dazhongsum+=score[i];
dazhongshu++;
}
}

//这里要判断zhuanjiashudazhongshu0不能做除数

if (zhuanjiashu>0)
zhuanjiaave=zhuanjiasum/zhuanjiashu;

if (dazhongshu>0)
dazhongave=dazhongsum/dazhongshu;


if (dazhongshu==0)
yuanshiave=zhuanjiaave;
else
yuanshiave=zhuanjiaave*0.6+dazhongave*0.4;
zuizhongave=yuanshiave;

returnzuizhongave;
}

第二题及代码
//
/*

给定一个数组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 "stdafx.h"
#include
#include
#include
#include
using namespace std;
void sort(int input[],int output[], int n);

int _tmain(int argc, _TCHAR* argv[])

{
int input[] = {3, 6, 1, 9, 7, 8, 2,10};
int wc=0;
int nCount =sizeof(input)/sizeof(int);
for(wc=0; wc {
cout< //cout<<"\n"< }
cout << endl;


int output[]= {3, 6, 1, 9, 7, 8, 2, 10};
sort(input,output, nCount);
system("pause");


return 0;
}

void sort(int input[],int output[], int n)
{
int m=n;
//cout<

int i,j,temp;

bool exchange;//交换标志

//对数组进行排序

for(i=0;i {
exchange=FALSE;
for(j=m-2;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(input[j+1] {//交换记录
temp=input[j+1];
input[j+1]=input[j];
input[j]=temp;
exchange=TRUE;
}
if(!exchange)
break;
}

for(int wc1=0; wc1只是来显示排序结果
{
cout< }
cout << endl;

int q=m-1;
if((m%2)==0)
{
intmid=m/2;
for (inttempmid=0; tempmid<=mid; tempmid++)//注意循环语句的执行顺序
{
output[mid+tempmid]=input[q];
q--;
output[mid-tempmid-1]=input[q];
q--;
}
}

if((m%2)!=0)//注意循环语句的执行顺序
{
intmid=q/2;
output[mid]=input[q];
for (inttempmid=1;tempmid<=mid;tempmid++)
{
q--;
output[mid-tempmid]=input[q];
q--;
output[mid+tempmid]=input[q];
}
}

for(int wc=0; wc
{
cout< }
cout << endl;

}

测试结果:

当int input[] = {3, 6, 1, 9,7, 8, 2, 10};,结果如下:

3 6 1 9 7 8 2 10
1 2 3 6 7 8 9 10
1 3 7 9 10 8 6 2

当int input[] = {3, 6, 1, 9,7, 8, 2, 10};,结果如下:

3 6 1 9 7 8 2
1 2 3 6 7 8 9
2 6 8 9 7 3 1

你可能感兴趣的:(华为校园招聘上机考试题目)