【微众银行笔试题汇总】 2024-03-31-微众银行春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员

✨ 本系列打算持续跟新微众银行近期的春秋招笔试题汇总~

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

文章目录

    • 微众银行-2024.03.31
    • 01.魔法矩阵
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 02.魔法迷宫
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 03.LYA 的魔法球对决
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后

微众银行-2024.03.31

01.魔法矩阵

问题描述

LYA 在玩一款魔法矩阵游戏。游戏中有一个 3 × 3 3 \times 3 3×3 的矩阵,每个格子中都有一个魔法物品。LYA 每次可以选择一行或一列,并将其向左、右、上、下滑动一格。滑出边界的物品会从另一端出现。例如,如果将第一行 123 123 123 向左滑动一格,它将变成 231 231 231

游戏开始时,魔法物品的初始状态如下:

1 2 3
4 5 6
7 8 9

LYA 想知道,经过若干次操作后,矩阵中魔法物品的排列会变成什么样。

输入格式

第一行包含一个正整数 n n n,表示操作的数量。

第二行包含 n n n 个正整数,其中第 i i i 个数表示第 i i i 次操作:

  • 如果操作为 1 1 1 2 2 2 3 3 3,分别表示将第 1 1 1 2 2 2 3 3 3 行向右滑动一格。
  • 如果操作为 4 4 4 5 5 5 6 6 6,分别表示将第 1 1 1 2 2 2 3 3 3 列向上滑动一格。

输出格式

输出 3 3 3 行,每行 3 3 3 个数,表示经过所有操作后矩阵的状态。

样例输入

2
1 5

样例输出

3 5 2
4 8 6
7 1 9

数据范围

1 ≤ n ≤ 50000 1 \leq n \leq 50000 1n50000 1 ≤ o p ≤ 6 1 \leq op \leq 6 1op6

题解

本题可以用模拟的方法来解决。我们可以用一个二维数组来表示矩阵的状态,然后根据每次操作来更新矩阵的状态。

对于行操作,我们可以先保存该行最后一个元素,然后从后往前依次将每个元素替换为其前一个元素,最后将第一个元素替换为我们之前保存的最后一个元素。

对于列操作,我们可以先保存该列第一个元素,然后从前往后依次将每个元素替换为其下一个元素,最后将最后一个元素替换为我们之前保存的第一个元素。

最后,我们将更新后的矩阵输出即可。

时间复杂度: O ( n ) O(n) O(n),其中 n n n 为操作数量。
空间复杂度: O ( 1 ) O(1) O(1),只需要常数级别的额外空间。

参考代码

  • Python
n = int(input())
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ops = list(map(int, input().split()))

for op in ops:
    if op <= 3:
        row = op - 1
        last = matrix[row][-1]
        for i in range(2, 0, -1):
            matrix[row][i] = matrix[row][i-1]
        matrix[row][0] = last
    else:
        col = op - 4
        first = matrix[0][col]
        for i in range(2):
            matrix[i][col] = matrix[i+1][col]
        matrix[2][col] = first

for row in matrix:
    print(*row)
  • Java
import java.util.Scanner;

public class MagicMatrix {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int[] ops = new int[n];
        for (int i = 0; i < n; i++) {
            ops[i] = sc.nextInt();
        }

        for (int op : ops) {
            if (op <= 3) {
                int row = op - 1;
                int last = matrix[row][2];
                for (int i = 2; i > 0; i--) {
                    matrix[row][i] = matrix[row][i-1];
                }
                matrix[row][0] = last;
            } else {
                int col = op - 4;
                int first = matrix[0][col];
                for (int i = 0; i < 2; i++) {
                    matrix[i][col] = matrix[i+1][col];
                }
                matrix[2][col] = first;
            }
        }

        for (int[] row : matrix) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}
  • Cpp
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int ops[n];
    for (int i = 0; i < n; i++) {
        cin >> ops[i];
    }

    for (int op : ops) {
        if (op <= 3) {
            int row = op - 1;
            int last = matrix[row][2];
            for (int i = 2; i > 0; i--) {
                matrix[row][i] = matrix[row][i-1];
            }
            matrix[row][0] = last;
        } else {
            int col = op - 4;
            int first = matrix[0][col];
            for (int i = 0; i < 2; i++) {
                matrix[i][col] = matrix[i+1][col];
            }
            matrix[2][col] = first;
        }
    }

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

02.魔法迷宫

题目描述

K小姐最近迷上了一款叫做魔法迷宫的游戏。游戏中有 n n n 个关卡,每个关卡都有一个魔法值。第 i i i 个关卡的魔法值为 x i x_i xi。K小姐想挑战自己,看看在不同的魔法值限制下,最多能通过多少个关卡。

K小姐准备了 m m m 种不同的魔法值限制,第 j j j 种限制下,魔法值不能超过 v j v_j vj。现在,K小姐想知道,对于每种限制,她最多可以通过多少个关卡。

输入格式

第一行包含一个正整数 n n n,表示关卡的数量。

第二行包含 n n n 个正整数 x 1 , x 2 , ⋯   , x n x_1, x_2, \cdots, x_n x1,x2,,xn,表示每个关卡的魔法值。

第三行包含一个正整数 m m m,表示魔法值限制的数量。

接下来 m m m 行,每行包含一个正整数 v j v_j vj,表示第 j j j 种魔法值限制。

输出格式

输出共 m m m 行,每行一个整数,表示在对应的魔法值限制下,K小姐最多可以通过的关卡数量。

样例输入

5
3 10 8 6 11
4
1
10
3
11

样例输出

0
4
1
5

数据范围

1 ≤ n , m ≤ 1 0 5 1 \leq n, m \leq 10^5 1n,m105 1 ≤ x i , v j ≤ 1 0 9 1 \leq x_i, v_j \leq 10^9 1xi,vj109

题解

本题可以使用二分查找或者双指针来解决。

首先,我们对每个关卡的魔法值数组 x x x 进行排序。然后,对于每个魔法值限制 v j v_j vj,我们可以在排序后的数组中进行二分查找,找到最大的下标 i d x idx idx,使得 x [ i d x ] ≤ v j x[idx] \leq v_j x[idx]vj。那么,在魔法值限制为 v j v_j vj 的情况下,K小姐最多可以通过 i d x idx idx 个关卡。

具体实现时,可以使用 C++ 标准库中的 upper_bound 函数进行二分查找。该函数返回指向第一个大于给定值的元素的迭代器,我们将该迭代器与数组起始位置相减,即可得到小于等于给定值的元素个数。

时间复杂度为 O ( ( n + m ) log ⁡ n ) O((n+m)\log n) O((n+m)logn),其中排序的时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn),m 次二分查找的时间复杂度为 O ( m log ⁡ n ) O(m\log n) O(mlogn)

参考代码

  • Python
n = int(input())
x = list(map(int, input().split()))
x.sort()
m = int(input())
for _ in range(m):
    v = int(input())
    idx = bisect.bisect_right(x, v)
    print(idx)
  • Java
import java.util.Arrays;
import java.util.Scanner;




public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] x = new int[n];
        for (int i = 0; i < n; i++) {
            x[i] = sc.nextInt();
        }
        Arrays.sort(x);
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            int v = sc.nextInt();
            int idx = Arrays.binarySearch(x, v);
            if (idx < 0) {
                idx = -idx - 1;
            }
            System.out.println(idx);
        }
    }
}
  • Cpp
#include <iostream>
#include <algorithm>
using namespace std;




int main() {
    int n;
    cin >> n;
    int x[n];
    for (int i = 0; i < n; i++) {
        cin >> x[i];
    }
    sort(x, x + n);
    int m;
    cin >> m;
    for (int i = 0; i < m; i++) {
        int v;
        cin >> v;
        int idx = upper_bound(x, x + n, v) - x;
        cout << idx << endl;
    }
    return 0;
}

03.LYA 的魔法球对决

问题描述

LYA 和她的好朋友在玩一个魔法球对决的游戏。游戏开始时,有一个魔法球,其能量值为 x x x。每回合,LYA 可以给魔法球注入能量值在 [ a , b ] [a, b] [a,b] 之间的能量,而她的朋友可以注入能量值在 [ c , d ] [c, d] [c,d] 之间的能量。当魔法球的能量值大于等于 s s s 时,游戏结束,最后一个给魔法球注入能量的人将获得胜利。

游戏中,LYA 总是先手。双方都采取最优策略,你的任务是判断对于给定的初始能量值 x x x 和获胜能量值 s s s,谁能够获得最后的胜利。

输入格式

第一行包含一个正整数 T T T,表示询问的组数。

接下来 T T T 行,每行包含六个正整数 x , s , a , b , c , d x, s, a, b, c, d x,s,a,b,c,d,分别表示初始能量值、获胜能量值以及双方每回合能够注入的能量值范围。每个数字之间用一个空格隔开。

输出格式

对于每组询问,如果 LYA 获胜,输出 1 1 1,否则输出 2 2 2。每个答案占一行。

样例输入

3
1 10 1 1 2 2
1 4 1 2 1 2
1 2 1 3 1 3

样例输出

2
2
1

数据范围

1 ≤ T ≤ 100 1 \leq T \leq 100 1T100 1 ≤ x ≤ s ≤ 1000 1 \leq x \leq s \leq 1000 1xs1000 1 ≤ a ≤ b ≤ 100 1 \leq a \leq b \leq 100 1ab100 1 ≤ c ≤ d ≤ 100 1 \leq c \leq d \leq 100 1cd100

题解

本题可以使用记忆化搜索或动态规划来解决。我们定义状态 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示当前能量值为 i i i,当前操作人为 j j j 0 0 0 表示 LYA, 1 1 1 表示她的朋友)时,当前操作人是否必胜。

对于 LYA 的回合,如果存在一种注入能量的方式,使得在下一回合她的朋友必败,那么 LYA 在当前回合必胜。

对于 LYA 朋友的回合,如果任意一种注入能量的方式,使得在下一回合 LYA 必败,那么 LYA 的朋友在当前回合必胜。

我们可以从最终状态开始,倒推出每个状态的必胜情况。最终答案即为 d p [ x ] [ 0 ] dp[x][0] dp[x][0]

时间复杂度: O ( T s ( b − a + d − c ) ) O(Ts(b-a+d-c)) O(Ts(ba+dc)),其中 T T T 为询问组数, s s s 为获胜能量值。
空间复杂度: O ( s ) O(s) O(s)

参考代码

  • Python
def dfs(energy, turn):
    if dp[energy][turn] != -1:
        return dp[energy][turn]
    if turn == 0:  # LYA's turn
        if energy + b >= s:
            dp[energy][turn] = 1
            return 1
        for i in range(a, b + 1):
            if not dfs(energy + i, 1 - turn):
                dp[energy][turn] = 1
                return 1
        dp[energy][turn] = 0
        return 0
    else:  # Friend's turn
        if energy + d >= s:
            dp[energy][turn] = 0
            return 0
        for i in range(c, d + 1):
            if not dfs(energy + i, 1 - turn):
                dp[energy][turn] = 0
                return 0
        dp[energy][turn] = 1
        return 1

T = int(input())
for _ in range(T):
    x, s, a, b, c, d = map(int, input().split())
    dp = [[-1] * 2 for _ in range(s + 1)]
    result = dfs(x, 0)
    print(1 if result else 2)
  • Java
import java.util.Arrays;
import java.util.Scanner;

public class MagicBallDuel {
    static int s;
    static int a, b, c, d;
    static int[][] dp;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        for (int t = 0; t < T; t++) {
            int x = scanner.nextInt();
            s = scanner.nextInt();
            a = scanner.nextInt();
            b = scanner.nextInt();
            c = scanner.nextInt();
            d = scanner.nextInt();
            dp = new int[s + 1][2];
            for (int[] row : dp) {
                Arrays.fill(row, -1);
            }
            int result = dfs(x, 0);
            System.out.println(result == 1 ? 1 : 2);
        }
    }

    private static int dfs(int energy, int turn) {
        if (dp[energy][turn] != -1) {
            return dp[energy][turn];
        }
        if (turn == 0) {  // LYA's turn
            if (energy + b >= s) {
                dp[energy][turn] = 1;
                return 1;
            }
            for (int i = a; i <= b; i++) {
                if (dfs(energy + i, 1 - turn) == 0) {
                    dp[energy][turn] = 1;
                    return 1;
                }
            }
            dp[energy][turn] = 0;
            return 0;
        } else {  // Friend's turn
            if (energy + d >= s) {
                dp[energy][turn] = 0;
                return 0;
            }
            for (int i = c; i <= d; i++) {
                if (dfs(energy + i, 1 - turn) == 0) {
                    dp[energy][turn] = 0;
                    return 0;
                }
            }
            dp[energy][turn] = 1;
            return 1;
        }
    }
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;

int s;
int a, b, c, d;
vector<vector<int>> dp;

int dfs(int energy, int turn) {
    if (dp[energy][turn] != -1) {
        return dp[energy][turn];
    }
    if (turn == 0) {  // LYA's turn
        if (energy + b >= s) {
            dp[energy][turn] = 1;
            return 1;
        }
        for (int i = a; i <= b; i++) {
            if (dfs(energy + i, 1 - turn) == 0) {
                dp[energy][turn] = 1;
                return 1;
            }
        }
        dp[energy][turn] = 0;
        return 0;
    } else {  // Friend's turn
        if (energy + d >= s) {
            dp[energy][turn] = 0;
            return 0;
        }
        for (int i = c; i <= d; i++) {
            if (dfs(energy + i, 1 - turn) == 0) {
                dp[energy][turn] = 0;
                return 0;
            }
        }
        dp[energy][turn] = 1;
        return 1;
    }
}

int main() {
    int T;
    cin >> T;
    for (int t = 0; t < T; t++) {
        int x;
        cin >> x >> s >> a >> b >> c >> d;
        dp.assign(s + 1, vector<int>(2, -1));
        int result = dfs(x, 0);
        cout << (result == 1 ? 1 : 2) << endl;
    }
    return 0;
}

写在最后

📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509526.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全流程基于GIS、python机器学习技术的地质灾害风险评价与信息化建库实践应用

将结合项目实践案例和科研论文成果进行讲解。入门篇&#xff0c;ArcGIS软件的快速入门与GIS数据源的获取与理解&#xff1b;方法篇&#xff0c;致灾因子提取方法、灾害危险性因子分析指标体系的建立方法和灾害危险性评价模型构建方法&#xff1b;拓展篇&#xff0c;GIS在灾害重…

鸿蒙 UIAbility和Compent 生命周期

一、UIAbility的生命周期 在UIAbility的使用过程中&#xff0c;会有多种生命周期状态&#xff0c;掌握UIAbility的生命周期&#xff0c;对于应用的开发非常重要。 1、UIAbility的生命周期 UIAbility的生命周期主要分为以下4个&#xff1a; Create---Foreground---Background---…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

一文读懂:设计顶尖用户体验的网站,必看!

在设计网站的过程中&#xff0c;我们需要发散思维&#xff0c;不仅要在脑海中构建丰富的网站原型框架&#xff0c;还要在我们面前实现。这种方法可以以最低的成本创造最大的效益&#xff0c;测试当前设计的实用性。它还可以测试用户对网站的想法和感受&#xff0c;全面判断网站…

AI 时代,程序员的出路在何方?

前言 随着 ChatGPT 的横空出世&#xff0c;给全球带来了巨大冲击&#xff0c;各种大语言模型如雨后春笋不断出现。国外如谷歌 Bard、Anthropic 的 Claude&#xff0c;国内如百度文心一言、阿里通义千问、讯飞星火认知大模型、昆仑万维天工大模型等。 现在的大语言模型比以前的…

泰克Tektronix MDO3054混合域示波器

181/2461/8938产品概述&#xff1a; Tektronix MDO3054 示波器&#xff0c;混合域&#xff0c;500 MHz&#xff0c;4 通道&#xff0c;5 GS/s 泰克 MDO3054 混合域示波器是终极 6 合 1 集成示波器&#xff0c;包括可选的集成频谱分析仪、任意函数发生器、逻辑分析仪、协议分析…

IDEA报错,`java.io.NotSerializableException`,解决:一个类只有实现了Serializable接口,它的对象才是可序列化的

问题&#xff1a;IDEA报错&#xff0c;java.io.NotSerializableException 解决办法&#xff1a;在出问题的类中加上implements Serializable&#xff0c;如下所示&#xff1a; 原因&#xff1a;当要将该实体类对象保存至某个地方时&#xff08;我这里是想将Catalog2Vo保存至R…

Linux安装JDK1.8

前言&#xff1a;本文内容为实操记录&#xff0c;仅供参考&#xff01; Ubuntu配置多版本jdk&#xff1a;http://t.csdnimg.cn/0UcTf 一、下载 官方下载&#xff08;需要注册Oracle账号&#xff09;&#xff1a; Java Downloads | Oracle 国内镜像下载&…

YOLOv8模型剪枝实战:Network Slimming网络瘦身方法

课程链接&#xff1a;YOLOv8模型剪枝实战&#xff1a;Network Slimming网络瘦身方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器&#xff0c;本课程使用Network Slimming&#xff08;网络瘦身&#xff09;剪枝方法对YOLOv8进行模型剪枝&#xff0c;…

关于不同AR(增强现实)SDK(软件开发工具包)的汇总和特性描述

以下是每个AR SDK的核心内容概述: ARCore 开发者:Google支持平台:Android(部分设备不支持)功能:运动追踪、平面追踪、点云图、云锚点、光照估计、环境探针、人脸追踪、2D图片追踪、人物遮挡、射线测试。官网链接:ARCoreARKit 开发者:Apple支持平台:iOS(iPhone和iPad)…

【内存泄漏】数据库连接connectionPhantomRefs内存过大

1. 问题背景 线上出现内存报警&#xff0c;内存增长曲线如下 dump内存文件&#xff0c;临时重新发布服务。后经排查发现是数据库连接池设置不合理以及mysql-connector-java 5.1.49有内存泄漏bug。以下为对此问题的分析及问题总结。 1.1 应用背景 数据库连接池&#xff1a; …

FastEI论文阅读

前言 研究FastEI有很长时间了&#xff0c;现在来总结一下&#xff0c;梳理一下认知。论文地址&#xff1a;https://www.nature.com/articles/s41467-023-39279-7&#xff0c;Github项目地址&#xff1a;https://github.com/Qiong-Yang/FastEI。 概要 这篇文章做的工作是小分子…

【御控物联】JavaScript JSON结构转换(10):数组To数组——转换映射方式

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

鸿蒙开发-ArkTS语言-基础类库

鸿蒙开发-UI-交互事件-通用事件 鸿蒙开发-UI-交互事件-键鼠事件 鸿蒙开发-UI-交互事件-焦点事件 鸿蒙开发-UI-交互事件-手势事件 鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 文章目录 前言 一、ArkTS语言基础类库概述 1. 异步并发和多线程并发能力 2. 提供常见容器类库的增删改查能…

电机选型与直线模组(简化版)

2-1电机分类和普通电机选型 1、电机及其原理的基本认知&#xff1a; 电动机我们平时简称电机&#xff0c;大部分情况下指的都是通电后&#xff0c;输出轴会旋转运动的设备。即将电能转换为机械能&#xff0c;供我们使用以驱动机构运行。电机简单的讲&#xff0c;其实就是一个…

用python,将有道词典中的生词导入扇贝单词

我试过有道词典和扇贝单词&#xff0c;个人感觉扇贝单词记忆功能非常好用&#xff0c;但是扇贝单词没有pc版&#xff0c;而有道在这方面就做的很好。博主平时都是用有道查生词&#xff0c;那有没有办法将有道词典中的生词导入扇贝中呢&#xff1f;下面的过程看上去很复杂&#…

护眼台灯什么牌子好一点,五大热销护眼台灯品牌推荐

台灯已成为每个家庭中不可或缺的照明设备&#xff0c;它的作用不仅限于在夜晚提供充分的光亮&#xff0c;还能迅速营造出适宜的氛围&#xff0c;为用眼提供一个更佳的环境。随着生活品质的提高&#xff0c;人们对台灯的期望也逐步升级&#xff0c;智能化和护眼功能逐渐成为消费…

Python文件操作命令

文件操作 我知道你最近很累&#xff0c;是那种看不见的、身体上和精神上的疲惫感&#xff0c;但是请你一定要坚持下去。就算无人问津也好&#xff0c;技不如人也好&#xff0c;千万别让烦躁和焦虑毁了你的热情和定力。别贪心&#xff0c;我们不可能什么都有&#xff0c;也别灰心…

C++STL(vector类)

文章目录 1.vector类的介绍2.vector的基本用法2.1 遍历vector2.2 数据插入vector2.3 vector容量2.4 查找元素2.5 vector包含vector(二维数组)2.6 迭代器失效2.6 迭代器覆盖 3.vector的底层(模拟实现)3.1 begin and end3.2 拷贝3.3 赋值3.4 size and capacity3.5 operator[]3.6 …

TP4054替代DP4054锂电池供电电路保护方案

锂离子电池以其优良的特性&#xff0c;被广泛应用于&#xff1a;手机、摄录像机、笔记本电脑、无绳电话、电动工具、遥控或电动玩具、照相机等便携式电子设备中。 01 电池特点 1、具有更高的重量能量比、体积能量比; 2、电压高&#xff0c;单节锂电池电压为3.6V&#xff0c;等…