西山居中大宣讲会现场笔试 游戏开发

9.24 15:00-17:00 西山居中大宣讲会现场笔试 游戏开发
一 填空题
1 判断while循环次数:

    int y = 2;
    while (y < 32)y = y + y;

答案: 4
次 1 2 3 4
y= 4 8 16 32

2 在[-2,2]区间取两个数,他们的和大于1的概率
答案: 9/32
解析: 画图 33/2/(44)

3 ping指令用到什么协议?
答案:ICMP协议 是TCP/IP协议的子协议

4 辗转相除法求最大公约数的时间复杂度,设较大的数为N
答案: O(logN)
由公式: m%n<=m/2 可知:每次递归调用,问题的规模减小一半,类似于二分查找,这显然是一个非常好的算法。

由于第2-5行,花费的时间为常量时间,同样,在第9-10行的if语句判断也是花费的常量时间,在第11行进行递归调用,问题规模减少一半。

可得出,T(N) = T(N/2)+O(1) 推出:时间复杂度为O(logN)
5:图片说明
图片说明
8/(2*2.5)

6 在x86-64位的计算机上输出结果为:

void f(char str[100])
{
    char s[] = "hello"; //6 因为最后有'\0'
    char* p = s; //8,64位计算机
    int x = 4; //4
    cout << sizeof(str) << sizeof(s)<<sizeof(p)<<sizeof(x);
}

答案: 8684

二 描述你用程序解决的最难问题,可以画图。
三 两个有序链表归并
四 改错 分C++和Java
C++考察位运算和类的定义与使用;
32位的描述符可以描述32个ID的状态是开启还是关闭;

五 写一个类 Space代表空间,可以存成千上万个点,实现两个成员函数
1 给三维坐标,加入点
2 给两个点的三维坐标,它们构成一个长方体的容量盒,返回所有在盒内的点

struct Point
{
    int x;
    int y;
    int z;
};
class Space 
{
private:
    vector<Point> points;
public:
    Space(){}
    ~Space() { points.clear(); }
    void setpoint(int x, int y, int z)
    {
        Point p;
        p.x = x; p.y = y; p.z = z;
        points.push_back(p);
    }
    vector<Point> inbox(int x1, int y1, int z1, int x2, int y2, int z2);
};
bool isinbox(int minx, int maxx, int miny, int maxy, int minz, int maxz, Point p)
{
    return (p.x >= minx && p.x <= maxx && p.y >= miny && p.y <= maxy && p.z >= minz && p.z <= maxz);
}
vector<Point> Space::inbox(int x1, int y1, int z1, int x2, int y2, int z2)
{
    vector<Point> ps;
    int minx = x1 < x2 ? x1 : x2;
    int maxx = x1 > x2 ? x1 : x2;
    int miny = y1 < y2 ? y1 : y2;
    int maxy = y1 < y2 ? y1 : y2;
    int minz = z1 < z2 ? z1 : z2;
    int maxz = z1 > z2 ? z1 : z2;
    for (int i = 0; i < points.size(); i++)
        if (isinbox(minx, maxx, miny, maxy, minz, maxz, points[i]))
            ps.push_back(points[i]);    
    return ps;
}

六 奇妙的题目 ,我没有弄懂

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务