巨人网络游戏程序员面试题.docx
- 文档编号:7203939
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:14
- 大小:23.48KB
巨人网络游戏程序员面试题.docx
《巨人网络游戏程序员面试题.docx》由会员分享,可在线阅读,更多相关《巨人网络游戏程序员面试题.docx(14页珍藏版)》请在冰豆网上搜索。
巨人网络游戏程序员面试题
软件工程师笔试试题
笔试时间:
三小时内
姓名:
余文瑛
开始时间:
08:
10
完成时间:
11:
10
(解题前,请首先写设计思路。
)
(请自行解答,一旦发现抄袭,笔试成绩取消。
)
第一题:
写一个函数,交换两个变量的值,不使用第三个变量。
如a=3,b=5,交换之后a=5,b=3;
答:
描述:
不使用新的空间,那么只能使用原来的变量‘记忆’旧的数据,由
voidswap(int*a,int*b)//C++语言描述
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
第二题:
编程求两个矩形的相交矩形
分别输入两个空间中两个矩形的左上角坐标x,y,以及宽(width)高(height),如果两个矩形有相交,输出相交的矩形左上角,右下角坐标,x1,y1,x2,y2
例如:
键盘输入:
0,0,100,100
20,20,100,40
输出:
20,20,100,60
算法描述:
我们将平面上的两个矩形分为左右两边,将左上角的横坐标较小的那个矩形看成’左边’矩形,较大的为右边矩形。
对于输入的rect1和rect2,如果rect2.p1.x大于rect2.p1.x则交换他们的位置.
我们用R1表示左边巨型,R2表示右边矩形
那么他们的相对位置有4种情况:
(1)R1右部上下两个顶点均//被包含在R2中
(2)R2左部上下两个定点均被包含在R1中
(3)R1右上方顶点被包含在右部矩形中,而右下角不在
(4)R1的右下角顶点被R2包含,而右上角不在
其中在(3)(4)种,还要分两种情况计算.
#include
usingnamespacestd;
//为了保证安全性,一般将类的成员访问属性设置为private,通过相关的属性(函数进行访问),但本例中
//为了简便,将部分成员直接设置为public访问属性
classPoint//定义点类
{
public:
intx,y;
public:
Point()
{
}
Point(inta,intb)
{
x=a;
y=b;
}
};
classRect//矩形类
{
public:
Pointp1;//左上角点坐标
intheight;//高
intwidth;//长
public:
Rect(Pointa,intw,inth)
{
p1=a;
height=h;
width=w;
}
Rect()
{}
};
classIntersect//处理相交情况类
{
private:
RectR1,R2;//2个矩形
public:
Pointp1;
boolb_inter;//指示是否相交
boolb_include;//指示是否包含(约定:
包含必相交)
public:
Intersect(Rectrect1,Rectrect2)
{
R1=rect1;
R2=rect2;
b_inter=false;//指示两矩形是否相交,初始值为false,在构造函数中初始化
b_include=false;
}
voidslove()//求相交
{
if(R1.p1.x+R1.width>=R2.p1.x)//
{
include();
if(!
b_include)
shuzhifangxiang();
}
else
{
swap(&R1,&R2);//使得rect1是"左边"图形
include();
if(!
b_include)
shuzhifangxiang();
}
}
voidswap(Rect*r1,Rect*r2)//矩形交换位置,目的是获得相对位置在左边的矩形为参照
{Recttemp;
temp=*r1;
*r1=*r2;
*r2=temp;}
voidinclude()//判断并求包含的相交
{
if((R2.p1.x>=R1.p1.x)&&(R2.p1.y>=R1.p1.y)&&((R2.p1.x+R2.width)<=(R1.p1.x+R1.width))&&((R2.p1.y+R2.height)<=(R1.p1.y+R1.height)))
{Pointp11(R2.p1.x,R2.p1.y);
Pointp22(R2.p1.x+R2.width,R2.p1.y+R2.height);
b_inter=true;
b_include=true;
p1=p11;
p2=p22;
cout<<"包含"< } } voidshuzhifangxiang()//求非包含的相交 { if(R1.p1.y>=R2.p1.y&&(R1.p1.y+R1.height)<=R2.p1.y+R2.height)// (1)R1右部上下两个顶点均//被包含在R2中 { Pointp11(R2.p1.x,R1.p1.y); Pointp22(R1.p1.x+R1.width,R1.p1.y+R1.height); b_inter=true; p1=p11; p2=p22; cout<<"情况1"< } // (2)R2左部上下两个定点均被包含在R1中 if((R1.p1.y<=R2.p1.y)&&((R1.p1.y+R1.height)>=(R2.p1.y+R2.height))) { Pointp11(R2.p1.x,R2.p1.y); Pointp22(R1.p1.x+R1.width,R2.p1.y+R2.height); b_inter=true; p1=p11; p2=p22; cout<<"情况2"< } //(3) if((R1.p1.y<=(R2.p1.y+R2.height))&&(R1.p1.y>=R2.p1.y)&&((R1.p1.y+R1.height)>=(R2.p1.y+R2.height)))//R1右上方顶点被包含在右部矩形中,而右下角不在 { //依然有两种情况 //1只包含右侧矩形的1个端点 //2包含右侧图形的2个端点 if(R2.p1.x+R2.width>=R1.p1.x+R1.width) { Pointp11(R2.p1.x,R1.p1.y); Pointp22(R1.p1.x+R1.height,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况3.1"< } else { Pointp11(R2.p1.x,R1.p1.y); Pointp22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况3.2"< b_inter=true; }if(((R1.p1.y+R1.height)>=R2.p1.y)&&((R1.p1.y+R1.height)<=(R2.p1.y+R2.height))&&(R1.p1.y<=R2.p1.y))//R1的右下角顶点被R2包含,而右上角不在 {//依然有两种情况 //1包含右侧矩形的两个端点 //2至包含右侧图形的1个端点 if(R1.p1.x+R1.width<=R2.p1.x+R2.width) { Pointp11(R2.p1.x,R2.p1.y); Pointp22(R1.p1.x+R1.width,R1.p1.y+R1.height); p1=p11; p2=p22; cout<<"情况4.1"< } else { Pointp11(R2.p1.x,R2.p1.y); Pointp22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况4.2"< b_inter=true; } } }; intmain() { //测试情况二 //Pointp1(0,0); //Pointp2(20,20); //RectRect1(p1,100,100); //RectRect2(p2,100,40); //测试情况一,三 //..... Intersectinter(Rect1,Rect2); inter.slove(); cout< cout< return0;s } 第三题: 模拟实现乘法运算 A*B=C,A和B最大值为9999.要求输出如下 1234 *121 -------------- 1234 2468 1234 =-------------- 149314 算法描述; (1)开辟两个数组,分别存储2个四位整数(注意在输入的时候123应当输入0123,即应该输入四位数) (2)用第二个乘数的个位数分别乘以第一个乘数的个位,十位,百位和千位,并处理进位问题 (3)分别用第二个数的十位,百位,千位重复 (2)的步骤 (4)将乘法中间数组temp[4][8],竖直方向求和(并处理进位问题),然后该和的个位数即是最终答案的对应为数值 (5)输出最终答案数组product[8]; #include #include usingnamespacestd; classHelp { public: inta[4],b[4];//两个数组,分别存储两个乘数 intproduct[8];//存储成绩 inttemp[4][8];//存储中间乘法过程 public: voidcout_1array(intA[])//输出一维数组 { inti; for(i=0;i<4;i++) cout< } voidcout_2array(intA[][8])//输出二维数组 {inti,j; for(i=0;i<4;i++) { for(j=0;j<8;j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 巨人 网络游戏 程序员 试题