【华为公司2014届校园招聘软件类上机考试样题】包含前两题答案 华为公司2014届校园招聘软件类上机考试样题

2013-09-04 22:25:17

粤港澳    2013-08-30 13:49:20
 
华为公司2014届校园招聘软件类上机考试样题  
需进行上机考试的岗位:软件开发工程师、操作系统工程师、底层软件开发工程师、云计算开发工程师、DSP工程师 
在线考试:机考系统的内核为VS2005及JDK1.7,使用Java答题时,类名必须为“Main”;使用C/C++答题时,使用VS2005支持的数据类型和函数。
题目类型:涉及数组、链表、指针、字符串、循环、枚举、排序等等。
考试时长:2小时
考试题目:3道题(共计320分),初级题(60分),中级题(100),高级题(160分),难度递增。
 
各难度上机考试样题
 
初级题:从考试成绩中划出及格线 
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
 
中级题:亮着电灯的盏数
 
一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
 
高级题:地铁换乘
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
 
前两个题比较简单,最后一题有点难,没做,哪位大神做出来了分享一下哦。
 注意:
  1. 对bool变量取反,不能用按位取反运算符~,而应该用逻辑非!,因为用~时,因为操作数的整形提升,使得操作数为1时,结果仍为1,而非0;

如下:

bool b = true;  //布尔变量按位取反,与取非!效果不一样
    b = ~b;
    cout<<b<<endl;

输出为1;

若b为false,输出也为1。

 
前两个题代码(欢迎交流指正):
  1 #include <iostream>
  2 #include <cassert>
  3 using namespace std;
  4 
  5 typedef size_t DataType;
  6 const int SIZE = 10;
  7 
  8 void DisplayArray(DataType *array,size_t len)
  9 {
 10     assert(array != NULL);
 11 
 12     size_t index = 0;
 13     while (index < len)
 14     {
 15         cout<<array[index]<<"	";
 16         ++index;
 17     }
 18     cout<<endl;
 19 }
 20 
 21 void DisplayArray(bool *array,size_t len)
 22 {
 23     assert(array != NULL);
 24 
 25     size_t index = 0;
 26     while (index < len)
 27     {
 28         cout<<array[index]<<"	";
 29         ++index;
 30     }
 31     cout<<endl;
 32 }
 33 
 34 //int compare(const DataType *p,const DataType *q)
 35 int compare(const void *p,const void *q)   //参数是void *类型
 36 {
 37     return (*(DataType *)p - *(DataType *)q);
 38 }
 39 
 40 DataType GetPassLine(DataType *scoreArray,size_t len)
 41 {
 42     assert(scoreArray != NULL);
 43     assert(len == 10);
 44 
 45     qsort(scoreArray,len,sizeof(DataType),compare);
 46 
 47     cout<<"the sorted score is : "<<endl;
 48     DisplayArray(scoreArray,len);
 49 
 50     if (scoreArray[0] > 60)
 51     {
 52         return 60;
 53     }
 54 
 55     return ( (scoreArray[4] / 10) * 10);
 56 }
 57 
 58 size_t GetNumberOfLigthOn(size_t n)
 59 {
 60     bool *OnOffState = new bool[n + 1];   //多申请一个空间,是的有效下标从1开始
 61     memset(OnOffState,1,n*sizeof(bool));   //有问题么?没问题
 62 
 63     size_t onCount = 0;
 64     size_t index;
 65     size_t j;
 66 
 67     for (index = 2;index <= n;++index)
 68     {
 69         //DisplayArray(OnOffState + 1,n);
 70 
 71         for (j = index;j <= n;j += index)
 72         {
 73             OnOffState[j] = !OnOffState[j];  //不能OnOffState[j] = ~OnOffState[j];
 74         }
 75     }
 76 
 77     for (index = 1;index <= n;++index)
 78     {
 79         onCount = OnOffState[index] ? (onCount + 1) : onCount;
 80     }
 81 
 82     return onCount;
 83 }
 84 
 85 
 86 void TestDriver()
 87 {
 88     //测试GetPassLine
 89     //DataType scoreArray[SIZE] = {61,67,89,71,  73,78,90,65, 100,82};   //60,全部及格
 90     //DataType scoreArray[SIZE] = {60,67,89,71,  73,78,90,65, 100,82};    //70,此时有7个及格
 91     ////DataType scoreArray[SIZE] = {60,67,89,62,  73,78,90,65, 100,82};    //70,有6个及格
 92 
 93     //size_t len = SIZE;
 94     //
 95     //cout<<"the pass line is : "<<GetPassLine(scoreArray,len)<<endl;
 96 
 97     //测试GetNumberOfLigthOn(size_t n)
 98     size_t numberOfLights = 10;
 99 
100     cout<<GetNumberOfLigthOn(numberOfLights)<<" lights in "<<numberOfLights<<" are on finally!"<<endl;
101 }
102 
103 int main()
104 {
105     /*bool b = false;  //布尔变量按位取反,与取非!效果不一样
106     b = ~b;
107     cout<<b<<endl;
108 */
109     TestDriver();
110     return 0;
111 }