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;
}