您的位置:首页 > 其它

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

2013-09-04 22:25 711 查看
2013-09-04 22:25:17

华为公司2014届校园招聘软件类上机考试样题

粤港澳 2013-08-30 13:49:20

华为公司2014届校园招聘软件类上机考试样题
需进行上机考试的岗位:软件开发工程师、操作系统工程师、底层软件开发工程师、云计算开发工程师、DSP工程师
在线考试:机考系统的内核为VS2005及JDK1.7,使用Java答题时,类名必须为“Main”;使用C/C++答题时,使用VS2005支持的数据类型和函数。
题目类型:涉及数组、链表、指针、字符串、循环、枚举、排序等等。
考试时长:2小时
考试题目:3道题(共计320分),初级题(60分),中级题(100),高级题(160分),难度递增。

[b]各难度上机考试样题[/b]

初级题:从考试成绩中划出及格线
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

前两个题比较简单,最后一题有点难,没做,哪位大神做出来了分享一下哦。
注意:

对bool变量取反,不能用按位取反运算符~,而应该用逻辑非!,因为用~时,因为操作数的整形提升,使得操作数为1时,结果仍为1,而非0;

如下:

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


输出为1;

若b为false,输出也为1。

前两个题代码(欢迎交流指正):

#include <iostream>
#include <cassert>
using namespace std;

typedef size_t DataType;
const int SIZE = 10;

void DisplayArray(DataType *array,size_t len)
{
assert(array != NULL);

size_t index = 0;
while (index < len)
{
cout<<array[index]<<"\t";
++index;
}
cout<<endl;
}

void DisplayArray(bool *array,size_t len)
{
assert(array != NULL);

size_t index = 0;
while (index < len)
{
cout<<array[index]<<"\t";
++index;
}
cout<<endl;
}

//int compare(const DataType *p,const DataType *q)
int compare(const void *p,const void *q)   //参数是void *类型
{
return (*(DataType *)p - *(DataType *)q);
}

DataType GetPassLine(DataType *scoreArray,size_t len)
{
assert(scoreArray != NULL);
assert(len == 10);

qsort(scoreArray,len,sizeof(DataType),compare);

cout<<"the sorted score is : "<<endl;
DisplayArray(scoreArray,len);

if (scoreArray[0] > 60)
{
return 60;
}

return ( (scoreArray[4] / 10) * 10);
}

size_t GetNumberOfLigthOn(size_t n)
{
bool *OnOffState = new bool[n + 1];   //多申请一个空间,是的有效下标从1开始
memset(OnOffState,1,n*sizeof(bool));   //有问题么?没问题

size_t onCount = 0;
size_t index;
size_t j;

for (index = 2;index <= n;++index)
{
//DisplayArray(OnOffState + 1,n);

for (j = index;j <= n;j += index)
{
OnOffState[j] = !OnOffState[j];  //不能OnOffState[j] = ~OnOffState[j];
}
}

for (index = 1;index <= n;++index)
{
onCount = OnOffState[index] ? (onCount + 1) : onCount;
}

return onCount;
}

void TestDriver()
{
//测试GetPassLine
//DataType scoreArray[SIZE] = {61,67,89,71,  73,78,90,65, 100,82};   //60,全部及格
//DataType scoreArray[SIZE] = {60,67,89,71,  73,78,90,65, 100,82};    //70,此时有7个及格
////DataType scoreArray[SIZE] = {60,67,89,62,  73,78,90,65, 100,82};    //70,有6个及格

//size_t len = SIZE;
//
//cout<<"the pass line is : "<<GetPassLine(scoreArray,len)<<endl;

//测试GetNumberOfLigthOn(size_t n)
size_t numberOfLights = 10;

cout<<GetNumberOfLigthOn(numberOfLights)<<" lights in "<<numberOfLights<<" are on finally!"<<endl;
}

int main()
{
/*bool b = false;  //布尔变量按位取反,与取非!效果不一样
b = ~b;
cout<<b<<endl;
*/
TestDriver();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: