【微众银行笔试题汇总】 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 - 1last = matrix[row][-1]for i in range(2, 0, -1):matrix[row][i] = matrix[row][i-1]matrix[row][0] = lastelse:col = op - 4first = matrix[0][col]for i in range(2):matrix[i][col] = matrix[i+1][col]matrix[2][col] = firstfor 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 turnif energy + b >= s:dp[energy][turn] = 1return 1for i in range(a, b + 1):if not dfs(energy + i, 1 - turn):dp[energy][turn] = 1return 1dp[energy][turn] = 0return 0else:  # Friend's turnif energy + d >= s:dp[energy][turn] = 0return 0for i in range(c, d + 1):if not dfs(energy + i, 1 - turn):dp[energy][turn] = 0return 0dp[energy][turn] = 1return 1T = 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 turnif (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 turnif (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 turnif (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 turnif (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领取,会在飞书进行同步的跟新。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试必问题24:线程池的拒绝策略有哪些 synchronized 和 lock 的区别 (重点)

以上列出的是Java线程池中常见的拒绝策略&#xff0c;具体可以根据实际情况选择合适的拒绝策略&#xff0c;也可以自定义实现RejectedExecutionHandler接口来定义自己的拒绝策略。默认的拒绝策略是AbortPolicy&#xff0c;即直接抛出异常。 最简回答&#xff1a;线程池的拒绝策…

YOLOv9改进策略:主干系列 | Transformer架构ConvNeXt 网络在检测中大放异彩

💡💡💡本文改进内容:Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩,同时对比 Swin-T 模型,在多种任务中其模型的大小和准确率均有一些提升,模型的 FLOPs 较大的减小且 Acc 有部分提高。 💡💡💡将此Transformer ConvNeXt 网络引入到YOLOv9…

【prometheus】k8s集群部署Grafana安装并接入Promethues数据源

目录 一、概述 1.1 优点 1.2 特点 二、grafana部署 三、grafana接入Promethues数据源 四、grafana可视化展示物理节点指标数据 五、grafana可视化展示k8s组件指标数据 5.1 kube-state-metrics简介 5.2 安装kube-state-metrics组件 一、概述 Grafana是一款用Go语言开发…

软考 - 系统架构设计师 - 数据流图案例题

阅读以下关于系统数据分析与建模的叙述&#xff0c;在答题纸上回答问题1至问题3。 【说明】 某公司正在研发一套新的库存管理系统。系统中一个关键事件是接收供应商供货。项目组系统分析员小王花了大量时间在仓库观察了整个事件的处理过程&#xff0c;并开发出该过程所执行活动…

vue 响应式原理 Object.defineProperty(obj,‘属性名A‘,options);

目录 self简单讲解1. 视图影响数据2. 数据影响视图3. 视图数据双向影响页面展示 百度 self 简单讲解 get和set方法是ES5中提供的&#xff0c;因为是方法&#xff0c;所以可以进行判断&#xff0c;get 一般是要通过 return 返回的&#xff1b;而 set 是设置&#xff0c;不用返回…

GT收发器第六篇_GT channel内部时钟关系

文章目录 一、TX端时钟二、RX端时钟 一、TX端时钟 TX端可分为4个区域&#xff0c;分别为FPGA TX接口、PCS靠FPGA侧、PCS靠PMA侧、PMA&#xff0c;如下图。GTX/GTH发射器包括TXBUFFER和TX相位校准电路&#xff0c;以解决时钟域之间的相位差。TX相位校准电路用于TXBUFFER被旁路时…

书生·浦语大模型开源体系(二)笔记

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【tensorflow框架神经网络实现鸢尾花分类_Keras】

文章目录 1、前言2、鸢尾花分类3、结果打印 1、前言 【tensorflow框架神经网络实现鸢尾花分类】一文中使用自定义的方式&#xff0c;实现了鸢尾花数据集的分类工作。在这里使用tensorflow中的keras模块快速、极简实现鸢尾花分类任务。 2、鸢尾花分类 import tensorflow as t…

营销日历丨2024年4月营销日历火热出炉!四月热点抢先看

4月1日 愚人节 愚人节是一个充满欢乐和恶搞的节日&#xff0c;品牌可以巧妙地利用这个节点来开展一些有趣的营销活动。在这个特殊的日子里&#xff0c;品牌可以走“愚人”的恶搞路线&#xff0c;但需要注意的是&#xff0c;营销活动要把握好尺度&#xff0c;避免过度恶搞&#…

STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台

资料下载地址&#xff1a;STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台 本实验通过两个STM32单片机设备分别测量室内外的温湿度&#xff0c;并把数据发送到上位机上传到ONENET物联网平台。 大体数据传输流程如下&#xff1a; 首先是注册OneNET平台账号&#…

Docker Desktop 在 Windows 上的安装和使用

目录 1、安装 Docker Desktop 2、使用 Docker Desktop &#xff08;1&#xff09;运行容器 &#xff08;2&#xff09;查看容器信息 &#xff08;3&#xff09;数据挂载 Docker Desktop是Docker的官方桌面版&#xff0c;专为Mac和Windows用户设计&#xff0c;提供了一个简…

Axure RP 9下载教程,产品经理实战指南!

Axure rp 9是产品经理必备的专业快速原型设计工具。Axure rp 9可快速高效地创建产品原型图&#xff0c;绘制APP和网页原型图、框架图、结构图等。但是Axuree rp 9下载在用户体验中的缺陷也相对明显&#xff0c;其设置交互方式相对繁琐&#xff0c;可视化不足、条件判断、变量、…

泰克Tektronix MDO3054混合域示波器

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

KNN算法 | K邻近:基础概念

目录 一. KNN算法原理二. KNN算法三要素1. K值的选择2. 距离2.1 欧氏距离2.2 曼哈顿距离(城市街区距离)2.3 切比雪夫距离(棋盘距离)2.4 闵可夫斯基距离2.5 标准化欧式距离2.6 余弦距离欧氏距离与余弦距离对比 3. 决策规则3.1 KNN分类任务多数表决法加权多数表决法 3.2 KNN回归任…

26番外1 对PE启动U盘的思考:制作启动盘,真的不用格式化!!!

番外1 对PE启动U盘的思考 我们在使用官方软件工具(如微PE工具箱)制作任何一个启动U盘的时候,他们总会提示我们:U盘需要格式化!!请备份好自己的数据!! 我一直在思考:为什么一定要格式化呢?需要格式化吗? 为了解决这个问题,我开始思考启动盘的本质. 启动盘的本质是什么?它怎么…

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示&#xff0c; 包括创建、测量&#xff08;onMeasure&#xff09;、布局&#xff08;onLayout&#xff09;、绘制&#xff08;onDraw&#xff09;以及销毁等流程。 自定义View主要涉及到onMeasure、…

风险与收益

风险与收益 影响资产需求的主要因素财富总量预期收益率资产的流动性影响流动性的主要因素 风险 如何降低风险系统风险和非系统风险机会集合与有效集合资产组合理论 影响资产需求的主要因素 影响资产需求的主要因素包括&#xff1a;财富总量、预期收益率、资产的流动性和风险。…

bashplotlib,一个有趣的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个有趣的 Python 库 - bashplotlib。 Github地址&#xff1a;https://github.com/glamp/bashplotlib 在 Python 中&#xff0c;绘制图形通常需要使用专门的绘图库&#xff0…

【Redis】redis集群模式

概述 Redis集群&#xff0c;即Redis Cluster&#xff0c;是Redis 3.0开始引入的分布式存储方案。实际使用中集群一般由多个节点(Node)组成&#xff0c;Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点&#xff1a;只有主节点负责读写请求和集群信息的维护&#…

整数删除,蓝桥杯训练题

题目描述: 给定一个长度为 N 的整数数列&#xff1a;A1,A2,…,AN。 你要重复以下操作 K 次&#xff1a; 每次选择数列中最小的整数&#xff08;如果最小值不止一个&#xff0c;选择最靠前的&#xff09;&#xff0c;将其删除&#xff0c;并把与它相邻的整数加上被删除的数值。 …