乐狗笔试

麻了,第二题显式输出格式不对,只过了66.67%,第一次在牛客上遇到这种错误。总体来说,比网易简单多了。
第一题,双人互打(100%)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 输入参数 Ax 角色A的血量,Ay 角色A 的攻击力,Az A的攻击CD,Aw 角色A的恢复力
输入参数 Bx 角***的血量,By 角*** 的攻击力,Bz B的攻击CD,Bw 角***的恢复力
     * @param Ax int整型 角色A的血量上限
     * @param Ay int整型 角色A的攻击力
     * @param Az int整型 A的攻击CD
     * @param Aw int整型 角色A的每回合恢复血量值
     * @param Bx int整型 角***的血量上限
     * @param By int整型 角***的攻击力
     * @param Bz int整型 B的攻击CD
     * @param Bw int整型 角***的每回合恢复血量值
     * @return int整型
     */
    int PK(int Ax, int Ay, int Az, int Aw, int Bx, int By, int Bz, int Bw) {
        // write code here
        int startA = Ax;
        int startB = Bx;

        ///第一轮攻击
        Ax -= By;
        Bx -= Ay;
        ++Az;
        ++Bz;
        int curAz = Az, curBz = Bz;
        while(Ax > 0 and Bx > 0)
        {
            int x = min(curAz, curBz);
            Ax += Aw * x;
            Bx += Bw * x;

            curAz -= x;
            curBz -= x;


            if(curAz == 0)
            {
                Bx -= Ay;
                curAz = Az;
            }

            if(curBz == 0)
            {
                Ax -= By;
                curBz = Bz;
            }
            if(Ax <= 0&nbs***bsp;Bx <= 0)break;


            if(Ax >= startA and Bx >= startB)break;
        }
        if(Ax <= 0 and Bx <= 0)return 3;
        else if(Ax <= 0)return 2;
        else if(Bx <= 0)return 1;
        else return 4;
    }
};
第二题,类似于分割字符串(格式不对,只过了66%)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定字符串 和 显示宽度。 按规则返回自动换行处理后的最后一行。 如不能则返回字符串"error"
     * @param str string字符串 给定的字符串
     * @param width int整型 显示的宽度
     * @return string字符串
     */
    string getLastLine(string str, int width) {
        // write code here
        int i = 0;
        while(i < str.length() and str[i] == ' ')++i;
        if(i == str.length())return "error";
        vector<string>res;
        while(i < str.length())
        {
            int j = i;
            while(j < str.length() and str[j] != ' ')++j;
            if((j - i) * 16 > width)return "error";
            res.push_back(str.substr(i, j - i));
            string tmp = "";
            while(j < str.length() and str[j] == ' '){
                ++j;
                tmp += " ";
            }
            if(j < str.length())res.push_back(tmp);
            i = j;
        }
        string ans = "";
        int t = 0;
        while(t < res.size())
        {
            ans = res[t];
            int k = t;
            while(k + 2 < res.size() and (ans.length() + res[k + 1].length() + res[k + 2].length()) * 16 <= width)
            {
                ans += (res[k + 1] + res[k + 2]);
                k += 2;
            }
            t = k + 2;
        }
        return ans;
    }
};

第三题,搜索(100%)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 抵达铁门时可能的最大生命值,如果不可达,则返回 -1。
     * @param cave int整型vector<vector<>> 洞穴的信息
     * @param hp int整型 小明的初始生命值
     * @return int整型
     */
    void dfs(vector<vector<int> >& cave, vector<vector<int> >&dp, int hp, int curx, int cury)
    {
        if(curx < 0&nbs***bsp;curx >= cave.size()&nbs***bsp;cury < 0&nbs***bsp;cury >= cave[0].size())return;
        if(cave[curx][cury] == -1)return;
        else if(cave[curx][cury] > 0)
        {
            hp -= cave[curx][cury];
            if(hp <= 0)return;
        }
        if(hp <= dp[curx][cury])return;
        dp[curx][cury] = hp;
        if(cave[curx][cury] == -3)return;
        dfs(cave, dp, hp, curx + 1, cury);
        dfs(cave, dp, hp, curx - 1, cury);
        dfs(cave, dp, hp, curx, cury + 1);
        dfs(cave, dp, hp, curx, cury - 1);

    }
    int EscapeFromCave(vector<vector<int> >& cave, int hp) {
        // write code here
        int curx, cury, outx, outy;
        int n = cave.size(), m = cave[0].size();
        for(int i = 0; i < n; ++i)
        {
            for(int j = 0; j < m; ++j)
            {
                if(cave[i][j] == -2)
                {
                    curx = i;
                    cury = j;
                }
                else if(cave[i][j] == -3)
                {
                    outx = i;
                    outy = j;
                }
            }
        }
        vector<vector<int>>dp(n, vector<int>(m, -1));
        dfs(cave, dp, hp, curx, cury);
        //return dp[curx][cury];
        return dp[outx][outy];
    }
};




#乐狗游戏##笔试##秋招##面试#
全部评论
雷火被虐,乐狗ak。第二题要考虑第一行前导空格,最后一行后导空格,还有中间合并。
1 回复 分享
发布于 2022-08-21 00:51 湖北
一样的
点赞 回复 分享
发布于 2022-08-20 23:19 北京
第三题有用BFS的吗
点赞 回复 分享
发布于 2022-08-20 22:12 四川
一样
点赞 回复 分享
发布于 2022-08-20 22:05 湖南
咱俩通过率一样hhh
点赞 回复 分享
发布于 2022-08-20 22:03 四川

相关推荐

4月29boss投递的简历&nbsp;约到5月8号早上面试因为是个小厂&nbsp;给的也不是很多&nbsp;所以就随便准备准备了上来就是八股1.struct和class的区别&nbsp;在开发中如何使用2.委托和事件的关系&nbsp;如何用action编写一个简单的事件订阅系统示例3.协程是什么?它和多线程有什么本质区别?4.awake和start的区别&nbsp;在2d&nbsp;AI物理移动时,为什么通常将逻辑写在fixedUpdate里面&nbsp;而不是update中5.什么是Scriptableobject&nbsp;&nbsp;SO相比于在每个Prefab里面MonoBehaviour面板上直接配置这些数值有什么优势?6.如何使用2d射线检测到一个玩家7.向量点乘&nbsp;叉乘相关8.fsm和行为树的差异&nbsp;你要实现一个简单的巡逻保安AI你会选择什么模式9.如果实现类似《空洞骑士》里面&nbsp;怪物遇到墙壁或者走到平台边缘掉头?&nbsp;你的实现方法是什么?10.两种近战攻击判定机制&nbsp;A:用碰撞器检测是否攻击到&nbsp;B:在帧动画的关键中调用一次范围检测来实现&nbsp;这两种的优缺点&nbsp;你觉得那种好?因为没怎么准备&nbsp;心里还是有点发怵的&nbsp;没想到头一次unity方向八股考了这么多&nbsp;七七八八的答了下后面技术主管来了11.拷打项目12.为什么选择游戏行业&nbsp;会玩什么游戏(为什么很多面试官都会问这个问题&nbsp;有没有能给鼠鼠解答一下)13.如果你在上面攻击判定的时候&nbsp;选择了b方法&nbsp;因为这个方法是依赖帧实现的&nbsp;如果你在攻击的时候因为网络波动原因导致攻击丢失怎么办?答:交给服务器处理&nbsp;(因为还没做过网络相关的模块&nbsp;这一点还真不知道)14.经典问题来了&nbsp;你在项目里遇到的难点是什么?怎么解决?15.平常是否使用ai反问环节1.如果入职之后是做什么工作?2.有没有入职培训?3.询问一下面试表现答:(笑)挺好的&nbsp;我觉得还ok后续过一个小时&nbsp;boss上面就通知面试通过了总结:出乎意料的八股询问这么多&nbsp;项目也询问了一些&nbsp;但是感觉项目询问的偏简单&nbsp;可能就是想知道项目是不是自己写的吧。base地是福州&nbsp;如果给多一些&nbsp;鼠鼠还真挺想去的最后祝各位都能找到合适的工作!!!!
查看18道真题和解析
点赞 评论 收藏
分享
评论
4
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务