乐狗笔试

麻了,第二题显式输出格式不对,只过了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 湖北
咱俩通过率一样hhh
点赞 回复 分享
发布于 2022-08-20 22:03 四川
一样
点赞 回复 分享
发布于 2022-08-20 22:05 湖南
第三题有用BFS的吗
点赞 回复 分享
发布于 2022-08-20 22:12 四川
一样的
点赞 回复 分享
发布于 2022-08-20 23:19 北京

相关推荐

到我怀里来:教育背景不用写主修课程,还有你写班级排名是什么意思?咋不写寝室排名呢😂要写就写年纪排名。得了那么多奖结果项目经历什么技术细节都不写清楚,把技术细节写清楚,用了什么技术解决了什么问题,“用了python语言、用了SQL语言”,有这样写的?hr一看就知道你是包装的或者比赛的奖是混的,你什么技术细节都不懂。校内职务全删了,什么三好学生、文明寝室这些你写上去干嘛?重复的奖学金你写三次干嘛?自我评价写那么多干嘛?谁想看这些
点赞 评论 收藏
分享
2024-12-09 16:31
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
4
7
分享
牛客网
牛客企业服务