百度笔试—9.13研发B卷(1:ac,2:ac,3:91%)

1. 统计baidu型字符串(AC)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int n = s.length();
        // 标记26个字母的是否是元音
        // 1:元音
        // 0:辅音
        int[] yy = new int[26];
        yy['a' - 'a'] = 1;
        yy['o' - 'a'] = 1;
        yy['e' - 'a'] = 1;
        yy['i' - 'a'] = 1;
        yy['u' - 'a'] = 1;

        // 标记字符串中的字符是否是元音
        int[] a = new int[n];
        for (int i = 0; i < n; ++i) {
            a[i] = yy[s.charAt(i) - 'a'];
        }

        int ans = 0;
        for (int i = 0; i < n - 4; ++i) {
            // 用集合统计5个字符是否相同
            // 如果集合大小为5,则互不相同
            Set<Character> set = new HashSet<>();
            set.add(s.charAt(i));
            set.add(s.charAt(i + 1));
            set.add(s.charAt(i + 2));
            set.add(s.charAt(i + 3));
            set.add(s.charAt(i + 4));

            if (set.size() == 5 && a[i] == 0 && a[i + 3] == 0
                && a[i + 1] == 1 && a[i + 2] == 1 && a[i + 4] == 1) {
                ++ans;
            }
        }
        System.out.println(ans);
    }
}

2. 打怪(AC)

有n个怪物排成一排,第i个怪物的血量为ai。有两个技能可以打怪:

  • 1.强力攻击,消耗1mp,对一只怪物造成1点伤害。
  • 2.踏前斩,消耗5mp,对当前怪物造成1的伤害,同时剑气将波及后两个怪物,对下一个怪物造成
    2点伤害,对下下个怪物造成3点伤害。
    如果一个怪物受伤后血量小于等于0,则怪物死亡。死亡后怪物的尸体依然占据一个位置,会被踏前斩的剑气打到。
    问击杀全部怪物至少需要花费多少mp?

倒着处理

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; ++i) {
            a[i] = scanner.nextInt();
        }

        long ans = 0; // 这里必须用long,会超int
        for (int i = n - 1; i >= 2; --i) {
            int n1 = a[i] / 3;
            int n2 = a[i - 1] / 2;
            int n3 = a[i - 2];
            int mn = Math.min(n1, Math.min(n2, n3));
            ans += mn * 5;
            a[i] -= mn * 3;
            a[i - 1] -= mn * 2;
            a[i - 2] -= mn;
            ans += a[i];
        }

        ans += a[0] + a[1];
        System.out.println(ans);
    }
}

3. for循环的嵌套层数(90.91%)

一段java代码,判断其中最多有多少层for循环嵌套。
保证代码合法,且不含注释。循环语句只有for,条件语句只有if,循环语句和条件语句保证包含大括号用来控制范围。
代码中只有一个类和一个主函数。

栈。
只差一个样例没过,求大佬指教。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder str = new StringBuilder("");

        while (scanner.hasNextLine()) {
            String input = scanner.nextLine();
            str.append(input); // 将代码合并成一个长字符串
        }
        String s = str.toString();

        Stack<String> stack = new Stack<>();
        int ans = 0;
        int cur = 0; // 当前嵌套层数
        int n = s.length();
        int i = 0;
        while (i < n) {
            // for 入栈,并且搜索到for后的'{'
            if (s.charAt(i) == 'f' && s.charAt(i + 1) == 'o' && s.charAt(i + 2) == 'r') {
                stack.push("for");
                ++cur;
                ans = Math.max(ans, cur);
                while (i < n - 2 && s.charAt(i) != '{') {
                    ++i;
                }
                ++i;
            } else if (s.charAt(i) == 'i' && s.charAt(i + 1) == 'f') { // if ,入栈
                stack.push("if");
                while (i < n - 2 && s.charAt(i) != '{') {
                    ++i;
                }
                ++i;
            } else if (s.charAt(i) == '}') {
                // '}'是if的,直接出栈
                if (!stack.isEmpty() && stack.peek().equals("if")) {
                    stack.pop();
                } else if (!stack.isEmpty()) { // '}'是for的,嵌套层数减一
                    stack.pop();
                    --cur;
                }
                ++i;
            } else {
                ++i;
            }
        }
        System.out.println(ans);
    }
}
#百度笔试##百度#
全部评论
大佬求问为什么打怪那题需要倒着处理,或者说有什么例子是反向遍历能过正向遍历过不了的?
点赞 回复 分享
发布于 2022-09-14 07:51 广东
楼主收到面试邀约了么
点赞 回复 分享
发布于 2022-09-16 12:20 广东

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
6 25 评论
分享
牛客网
牛客企业服务