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

第一题和答案

题目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 <iostream>
#include<windows.h>
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 <<fenshu<<endl;
    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<n;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 <stdio.h> 
#include <iostream>
#include <stdlib.h>
#include<windows.h>
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<nCount; wc++)//
    {
        cout<<input[wc] << " ";
        //cout<<"\n"<<endl;
    }
         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<<m<<endl;
        
    int i,j,temp;

    bool exchange;//交换标志

    //对数组进行排序

    for(i=0;i<m-1;i++)
    { 
       exchange=FALSE; 
       for(j=m-2;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
                            if(input[j+1]<input[j])
                            {//交换记录
                                     temp=input[j+1]; 
                                     input[j+1]=input[j];
                                     input[j]=temp;
                                     exchange=TRUE;
                            }
                            if(!exchange) 
                                     break;
    } 
        
     for(int wc1=0; wc1<m;wc1++)//只是来显示排序结果
         {
                   cout<<input[wc1]<<"";
         }
         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<m; wc++)
         {
                   cout<<output[wc]<<"";
    }
         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

 

 转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/11883657

 



 

你可能感兴趣的:(C++,华为,笔试面试)