微众银行2023.9.3 笔试编程题

题目1:切糖果

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();  // 糖果的长度
            int[] arr = new int[n];  // 糖果每一段的口味
            for (int i = 0; i < n; i++) {
                arr[i] = in.nextInt();
            }

            for (int i = 0; i < n; i++) {
                // 最长长度为最后一段或者出现重复段的位置
                if (i == (n - 1) || arr[i] == arr[i + 1]) {
                    System.out.println(i + 1);
                    break;
                }
            }
        }
    }
}

题目2:酷

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();  // 橡皮泥士兵数量
            int[] arr = new int[n];  // 橡皮泥士兵大小
            for (int i = 0; i < n; i++) {
                arr[i] = in.nextInt();
            }

            int num = addDiff(arr);
            System.out.println(num);
        }
    }

    // 增加差异化
    private static int addDiff(int[] arr) {
        int num = 0;  // 需要的单位橡皮泥
        boolean repeat = false;  // 当前橡皮泥中是否存在重复

        Arrays.sort(arr);  // 排序
        for (int i = 0; i < arr.length - 1; i++) {
            // 如果重复则后一个大小加1
            if (arr[i] == arr[i + 1]) {
                repeat = true;
                arr[i + 1] += 1;
                num += 1;
            }
        }

        return repeat ? num + addDiff(arr) : num;
    }
}

题目三:平均值

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();  // 数组的长度
            int u = in.nextInt();  // 有理数分子
            int v = in.nextInt();  // 有理数分母
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = in.nextInt();
            }

            int num = 0;
            double avg = (double) u / v;
            for (int i = 1; i <= n; i++) {  // 区间的长度
                for (int j = 0; j <= n - i; j++) {
                    if (avg == getAvg(arr, j, j + i)) {
                        num++;
                    }
                }
            }
            System.out.println(num);
        }
    }

    // 求数组指定范围内的平均数(左闭右开)
    private static double getAvg(int[] arr, int begin, int end) {
        int sum = 0;
        int len = end - begin;
        for (int i = begin; i < end; i++) {
            sum += arr[i];
        }
        return (double) sum / len;
    }
}
#微众银行笔试#
全部评论
牛啊
点赞 回复 分享
发布于 2023-09-03 22:22 陕西
第二题我也ac45%,为啥呀
点赞 回复 分享
发布于 2023-09-04 01:13 浙江
第二题你们想复杂了,只要升序排序,遍历比较加1就行。
点赞 回复 分享
发布于 2023-09-04 08:23 江苏
求问第一题,我也是18好懵
点赞 回复 分享
发布于 2023-09-04 11:57 陕西

相关推荐

3 12 评论
分享
牛客网
牛客企业服务