8.20讯飞笔试

选择题太多,编程题很容易
1. 求和1/2,2/3,3/5...前n项和
    float seqSum(int n) {
        // write code here
        float res(0),fz(1),fm(2);
        for(int i=0;i<n;i++){
            res+=fz/fm;
            float temp=fz;
            fz=fm;
            fm=temp+fm;
        }
        return round(res*100)/100;
    }
2.验证合法字符串
    bool signalVerify(string signal) {
        // write code here
        if(!(signal[0]>='a'&&signal[0]<='z')) return false;
        if(signal[1]!='=') return false;
        if(signal[2]==' ') return false;
        for(int i=2;i<signal.size();i++){
            if(!(signal[i]>='a'&&signal[i]<='z')&&!(signal[i]>='0'&&signal[i]<='9')&&signal[i]!=' ') return false;
        }
        return true;
    }
3.迷宫有多个入口,找到到目的地的最短路径
int dirc[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
vector<Point> res;
void dfs(Point cur, vector<Point> pre, vector<vector<int>> &maze)
{
    int i = cur.x;
    int j = cur.y;
    if (i < 0 || j < 0 || i > 3 || j > 3 || maze[i][j] == 1) return;
    pre.emplace_back(i, j);
    if (maze[i][j] == 8)
    {
        if (res.empty())res = pre;
        else res = res.size() > pre.size() ? pre : res;
        return;
    }
    maze[i][j] = 1;
    for (int k = 0; k < 4; k++)
    {
        int nexti = i + dirc[k][0];
        int nextj = j + dirc[k][1];
        dfs({nexti, nextj}, pre, maze);
    }
    maze[i][j] = 0;
}
vector<Point> winMazeGift(vector<vector<int>> &maze)
{
    vector<Point> enter;
    for (int i = 1; i <= 2; i++)
    {
        if (maze[i][0] != 1) enter.emplace_back(i, 0);
        if (maze[i][3] != 1) enter.emplace_back(i, 3);
    }
    for (int i = 0; i < 4; i++)
    {
        if (maze[0][i]  != 1 ) enter.emplace_back(0, i);
        if (maze[3][i]  != 1) enter.emplace_back(3, i);
    }
    vector<Point> pre;
    for (auto i : enter)
    {
        dfs(i, pre, maze);
    }
    return res;
}


#讯飞笔试#
全部评论
膜拜大佬,只做了一题半,还不是全通过那种🤒
点赞 回复
分享
发布于 2022-08-20 21:32 安徽

相关推荐

7 11 评论
分享
牛客网
牛客企业服务