一份软件工程师的面试试题(二)

2014-11-24 00:58:27 · 作者: · 浏览: 19
,开始判断杀人凶手。每个人可以根据各人的表情反应,判断并提议杀死自己心目中的坏人。不过最终的裁决权属于村长,综合大家的意见杀死一人。此时裁判宣布此人出局。游戏进入下一轮,由天黑到天亮,再有2人出局,如此反复,直到最后好人先被全部杀死,则游戏结束,“邪恶”的一方战胜了“正义”的一方;而另一个结局则是在大家以及村长的英明决断下,坏人被全部杀死,则“正义”的一方战胜了“邪恶”的一方。


现在,我们的问题是,请写出你的思路,并编写一个C/C++语言程序,求出:在坏人有两个(n = 2)的情况下,需要多少个好人(m = ),才能够使这个游戏比较公平,也就是说,从概率上说,“正义”的一方与“邪恶”的一方胜利的几率最接近于50%。


(此题与下面一题选做一道)


6、在以上的杀人游戏中,还有一个玩法,就是取消村长这个角色,“天亮”后剩余的人每个人投票列出自己心目中最怀疑的2个人,以此决定让谁出局。试问,在此玩法下,上面的问题又何解?


7.C++程序设计


1).写出以下程序的运行结果:


#include


class Base


{


public:


Base()


{


cout << “Base()” << endl;


}


Base(const Base &theBase)


{


cout << “Base(const Base &theBase)” << endl;


}


~Base()


{


cout << “~Base()” << endl;


}


void Open()


{


OnOpen();


}


private:


virtual void OnOpen() = 0;


};


class Derived : public Base


{


public:


Derived()


{


cout << “Derived()” << endl;


}


Derived(const Derived &theDerived)


{


cout << “Derived(const Derived &theDerived)” << endl;


}


~Derived()


{


cout << “~Derived()” << endl;


}


private:


virtual void OnOpen()


{


//这里可能抛出异常


}


};


Base *CreateInstance()


{


return new Derived();


}


int main()


{


Base *pBase = ::CreateInstance();


if (pBase)


{


pBase->Open();


delete pBase;


}


return 0;


}


2).在1)中,类Base和类Derived的实现有没有问题?如果有,如何修改?


3).说明1)中类Base的Open函数和OnOpen函数的设计目的和意义。


4).使用STL技术修改main()函数中的代码,使之成为异常安全的。