首页 > 4.11网易互娱游戏研发工程师笔试第一题
头像
冰河相依
编辑于 2020-04-11 23:24
+ 关注

4.11网易互娱游戏研发工程师笔试第一题

网易互娱游戏研发工程师,第一道题,40米大刀,代码比较丑,大家可以互相讨论一下,求大佬轻喷~

题目:暂时没有。。。

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

// 自定义的一个9数量级的int最大值,满足最大值*2依然最大值(不会溢出的意思)
const int int_max = 0x3f3f3f3f;

// 获取两点之间的距离
double dis(int x1, int y1, int x2, int y2)
{
    int x = abs(x1 - x2);
    int y = abs(y1 - y2);
    return sqrt(pow(x, 2) + pow(y, 2));
}

// 这个是获取积分和玩家的距离的二维数组,如果不存在积分就会标记为int_max
vector<vector<double>> diss(vector<vector<int>> vvi, int size, int x, int y)
{
    // 申请动态二维数组
    vector<vector<double>> res(size, vector<double>(size, int_max));
    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            if (vvi[i][j] != 0)
            {
                res[i][j] = dis(x, y, i, j);
            }
        }
    }
    return res;
}

// 取得小于等于大刀距离的积分的坐标
bool getL(vector<vector<double>> &vvi, int len, int &rx, int &ry)
{
    for (int i = 0; i < vvi.size(); ++i)
    {
        for (int j = 0; j < vvi.size(); ++j)
        {
            if (vvi[i][j] <= len)
            {
                vvi[i][j] = int_max;
                rx = i;
                ry = j;
                return true;
            }
        }
    }
    return false;
}

int main(int argc, char const *argv[])
{
    int T;
    cin >> T;
    for (int i = 0; i < T; ++i)
    {
        int M, L;
        cin >> M >> L;
        // 申请动态二维数组
        vector<vector<int>> place(M, vector<int>(M, 0));
        for (int j = 0; j < M; ++j)
        {
            for (int k = 0; k < M; ++k)
            {
                cin >> place[j][k];
            }
        }
        int x, y;
        cin >> x >> y;
        // 获取距离表
        vector<vector<double>> dist = diss(place, M, x, y);
        int rx, ry;
        while (true)
        {
            // 获取坐标
            bool ans = getL(dist, L, rx, ry);
            if (!ans)
            {
                break;
            }
            else
            {
                // 增加大刀长度
                L += place[rx][ry];
            }
        }
        // 输出最终大刀长度
        cout << L << endl;
    }

    // system("pause");

    return 0;
}


全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐