微众银行笔试 微众银行笔试题 0331

笔试时间:2024年03月31日

历史笔试传送门:2023秋招笔试合集

第一题

题目:数字魔方

小明玩起了神奇的平面魔方。平面魔方可以表示为3x3的9个格子,每次可以选一列或者一行分别进行上下或左右滑动。滑出边界的部分会从另一端出现。例如第一行123,若往左滑动一格,会变成231。上下同理。小明魔方初始时的状态是:

1 2 3

4 5 6

7 8 9

小明想知道经过他若干次操作后魔方会变成什么样。

输入描述

一行1个整数n,表示操作数量。第二行n个整数op1,op2,...opn。其中opi表示第i次操作,操作为1、2、3时分别表示将第1、2、3行向右滑动一格,操作为4、5、6时分别表示将第1、2、3列向上滑动一格。

对于40%的数据,1 ≤n ≤50 对于80%的数据,1 ≤n ≤ 5000 对于100%的数据,1 ≤n≤50000,1 ≤op ≤6

输出描述

输出3行每行3个数表示经过操作后的状态。

样例输入

2

1 5

样例输出

3 5 2

4 8 6

7 1 9

提示

第—次操作后为:

3 1 2

4 5 6

7 8 9

第二次操作后为:

3 5 2

4 8 6

7 1 9

参考题解

模拟

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n; cin >> n;
    vector<vector<int>> a {
        {1,2,3}, {4,5,6}, {7,8,9}  
    };
    for (int i = 0; i < n; ++i) {
        int op; cin >> op;
        if (op <= 3) {
            int t = a[op - 1][2];
            for (int j = 2; j >= 1; --j) {
                a[op - 1][j] = a[op - 1][j - 1];
            }
            a[op - 1][0] = t;
        } else {
            int t = a[0][op - 4];
            for (int j = 0; j < 2; ++j) {
                a[j][op - 4] = a[j + 1][op - 4];
            }
            a[2][op - 4] = t;
        }
    }
    for (auto& v : a) {
        for (auto& e : v) cout << e << " ";
            cout << "\n";
    }
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] a = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        for (int i = 0; i < n; ++i) {
            int op = scanner.nextInt();
            if (op <= 3) {
                int t = a[op - 1][2];
                for (int j = 2; j >= 1; --j) {
                    a[op - 1][j] = a[op - 1][j - 1];
                }
                a[op - 1][0] = t;
            } else {
                int t = a[0][op - 4];
                for (int j = 0; j < 2; ++j) {
                    a[j][op - 4] = a[j + 1][op - 4];
                }
                a[2][op - 4] = t;
            }
        }
        for (int[] v : a) {
            for (int e : v) System.out.print(e + " ");
            System.out.println();
        }
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

n = int(input())
a = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
for _ in range(n):
    op = int(input())
    if op <= 3:
        t = a[op - 1][2]
        for j in range(2, 0, -1):
            a[op - 1][j] = a[op - 1][j - 1]
        a[op - 1][0] = t
    else:
        t = a[0][op - 4]
        for j in range(2):
            a[j][op - 4] = a[j + 1][op - 4]
        a[2][op - 4] = t
for v in a:
    print(*v)

第二题

题目:看电影

春节档将至,小明期待已久的电影《包饺子》终于上映了,他打算到电影院好好欣赏。

小明所在的地区有n个电影院播放该电影。当然,即便是同一个电影,每家电影院的票价也是不尽相同的。小明制定了m个计划,第i个计划中最多可花费vi元去观看这个电影。现在小明想知道每个计划中能在多少不同的电影院中观看该电影,以便他在观影后安排其他的春节活动。

输入描述

第—行1个正整数n,表示电影院的数量。

第二行n个正整数,X1, ..., Xn,表示目标电影在每个电影院的票价。第三行1个正整数m,表示计划个数。

接下来m行,每行一个正整数v,表示第i个计划中观看电影的花费预算。

输出描述

输出m行,每行—个整数表示答案。

样例输入

5

3 10 8 6 11

4

1

10

3

11

样例输出

0

4

1

5

参考题解

把电影院的价格排序,然后再二分搜索插入位置即可。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n; cin >> n;
    vector<int> x(n);
    for (int i = 0; i < n; ++i) cin >> x[i]; 
    sort(x.begi

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论
线上吗
点赞 回复 分享
发布于 05-22 13:12 河北

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
1 10 评论
分享
牛客网
牛客企业服务