发布于 2014-09-25 08:40:01 | 603 次阅读 | 评论: 0 | 来源: 网友投递
盛大网络
作为领先的互动娱乐媒体企业,盛大网络通过盛大游戏、盛大文学、盛大在线等主体和其它业务,向广大用户提供多元化的互动娱乐内容和服务。 盛大游戏拥有国内最丰富的自主知识产权网络游戏的产品线,向用户提供包括大型多人在线角色扮演游戏(MMORPG)、休闲游戏等多样化的网络游戏产品,满足各类用户的普遍娱乐需求。
本文是一份盛大游戏2011年的校招c++工程师笔试题,最下面附有参考答案,感兴趣的同学参考下。
1、下列代码的输出为:
#include "iostream"
#include "vector"
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();itor++)
{
if(*itor==300)
{
itor = array.erase(itor);
}
}
for(itor=array.begin();itor!=array.end();itor++)
{
cout<<*itor<<" ";
}
return 0;
}
A、100 300 300 500 B、100 300 500 C、100 500 D、程序错误
2、下列代码的输出为:
class CParent
{
public:
virtual void Intro()
{
printf("I'm a Parent, ");
Hobby();
}
virtual void Hobby()
{
printf("I like football!");
}
};
class CChild:public CParent
{
public:
virtual void Intro()
{
printf("I'm a Child, ");
Hobby();
}
virtual void Hobby()
{
printf("I like basketball!\n");
}
};
int main(void)
{
CChild *pChild = new CChild();
CParent *pParent = (CParent*)pChild;
pParent->Intro(); 、
return 0;
}
A、I'm a Child,I like football! B、I'm a Child,I like basketball!
C、I'm a Parent,I like football! D、I'm a Parent,I like basketball!
3、在win32平台下,以下哪种方式无法实现进程同步?
A、Critical Section B、Event C、Mutex D、Semaphore
4、按照升序排列的一组数据123456798,下面哪种排序法在空间和时间上最优?
A、快速排序 B、冒泡排序 C、插入排序 D、堆排序
5、以下哪句的说法是正确的
A、在页式存储管理中,用户应将自己的程序划分为若干个相等的页
B、所有的进程都挂起时,系统将陷入死锁
C、执行系统调用可以被中断
D、进程优先数是进程调度的重要依据,必须根据进程运行情况动态改变
6、以下描述正确的是
A、虚函数是可以内联的,可以减少函数调用的开销提高效率
B、类里面可以同时存在函数名和参数都一样的虚函数和静态函数
C、父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类对象指针会调用父类的析构函数
D、以上都不对
7、5+55+555+...+555..5(55个5)所得之和的末四位数是多少
A、9435 B、9445 C、9475 D、9485
8、5+55+555+...+555..5(12个5)所得之和的末三位数是多少
9、7+77+777+...+777..7(2005个7)所得之和的末四位数是多少
简答题:快速排序的思想是递归的,但是它的平均效率却是众多排序算法中最快的,为什么?请结合本例说明你对递归程序的理解。
算法题:用你熟悉的编程语言,设计如下功能的函数:输入一个字符串,输出该字符串中所有字母的全排列。程序请适当添加注释。
C++函数原型: void Print(const char *str)
输入样例: abc
输出结果: abc、acb、bca、bac、cab、cba
参考答案:
简答题:
原因:
(1)内循环是与固定值进行比较的,不会对数据进行连续的搬移。
(2)比较次数少,而且对于随机数组而言,很少出现主元选择不当而降低效率的问题。
递归程序的理解:
理想情况下复杂度为T(n)=O(n)+T(n/2)=O(nlogn),递归就是将原先复杂度为n的算法,逐步减少操作数量(由T(n)降至T(n/2)),运用分治思想将复杂问题一次一次折半地简化,达到最终以对数复杂度解决问题的目的。
注意快排只是平均和最好情况下的复杂度为O(nlogn),它最坏的复杂度是O(n^2),当然,只要输入数组是随机的,出现O(n^2)复杂度的概率好比“你家的电脑被闪电击中了”。
算法题:
全排列之前有百度的笔试题出现过,但这里有些变化,注意到参数是const的,也就是不能直接在Print中操作(因为需要交换位置),解决方法是重新定义一个辅助函数,用拷贝后的数组变化作为参数传入,详见CPP代码。
#include <iostream>
using namespace std;
static int count = 0;
void permut(char* a, int start, int end)
{
if(start >= end)
{
++count;
cout << a << endl;
}
else
{
for(int i = start; i <= end; ++i)
{
swap(a[i], a[start]);
permut(a, start + 1, end);
swap(a[i], a[start]);
}
}
}
void Print(const char* str)
{
int len = strlen(str);
char *p = new char[len + 1];
strncpy(p, str, len);
p[len] = '\0';
permut(p, 0, len - 1);
delete [] p;
}
int main()
{
int a[0...10];
Print("abcd");
cout << endl << "总共有 " << count << " 个" << endl;
return 0;
}