科大讯飞8.6 A卷笔试编程题 全AC

第一题

    public int findEwordCount (String string) {
        int countE = 0;
        for (String word : string.split(" ")) {
            if (word.contains("e")) {
                countE++;
            }
        }
        return countE;
    }

第二题

四边形切成两个三角形就行。当时在想选择的两个三角形面积可能重叠。后来看到题目里有写四个点顺序连接可以构成四边形,所以选p1, p2, p3和p1,p3,p4。这样面积就不会重叠。四舍五入直接加0.5就行。三角形面积计算用海伦公式即可。

class Solution {
    public long getArea (Point p1, Point p2, Point p3, Point p4) {
        double area1 = calTri(p1, p2, p3);
        double area2 = calTri(p1, p3, p4);
        return (long) (area1 + area2 + 0.5);
    }

    private double calTri(Point p1, Point p2, Point p3) {
        double a = calLen(p1, p2);
        double b = calLen(p1, p3);
        double c = calLen(p2, p3);
        double p = (a + b + c) / 2;
        return Math.sqrt(p * (p - a) * (p - b) * (p - c));
    }

    private double calLen(Point p1, Point p2) {
        int x = p1.x - p2.x;
        int y = p1.y - p2.y;
        return Math.sqrt(x * x + y * y);
    }
}

第三题

dp没想出来。用的记忆化搜索+DFS。

class Solution {
    String str;
    public int findIflytek (String _str) {
        str = _str;
        return dfs(0, 'i');
    }
    private int MOD = 10000;
    private int[] memo = new int[70001];
    private int dfs(int i, char ch) {
        if (str.length() == i) {
            return 0;
        }
        int hash = i;
        if (ch == 'f') hash += MOD;
        else if (ch == 'l') hash += 2 * MOD;
        else if (ch == 'y') hash += 3 * MOD;
        else if (ch == 't') hash += 4 * MOD;
        else if (ch == 'e') hash += 5 * MOD;
        else if (ch == 'k') hash += 6 * MOD;
        if (memo[hash] != 0) return memo[hash];
        int count = 0;
        if (str.charAt(i) == ch) {
            if (ch == 'i') count += dfs(i + 1, 'f');
            else if (ch == 'f') count += dfs(i + 1, 'l');
            else if (ch == 'l') count += dfs(i + 1, 'y');
            else if (ch == 'y') count += dfs(i + 1, 't');
            else if (ch == 't') count += dfs(i + 1, 'e');
            else if (ch == 'e') count += dfs(i + 1, 'k');
            else if (ch == 'k') ++count;
        }
        int ans = count + dfs(i + 1, ch);
        memo[hash] = ans;
        return ans;
    }
}
#科大讯飞##笔试##Java##秋招##科大讯飞笔试是种什么体验#
全部评论
2 回复 分享
发布于 2022-08-06 21:27
太牛了
点赞 回复 分享
发布于 2022-08-06 21:24
第二题也全a了吗?
点赞 回复 分享
发布于 2022-08-06 22:09
第二题我也用的海轮公式,一开始选的点有问题,后来换了就AK了。
点赞 回复 分享
发布于 2022-08-06 23:09
大佬笔试出结果吗
点赞 回复 分享
发布于 2022-08-09 07:24
大佬约面了吗
点赞 回复 分享
发布于 2022-08-15 19:25
请问笔试时长是多久啊?
点赞 回复 分享
发布于 2022-08-16 14:59

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
评论
12
34
分享
牛客网
牛客企业服务