2023 美团笔试题 0513

笔试时间:2023年05月13日 暑期实习

第一题

题目:小美的整数

小美有两个数字,其中第一个数字是任意的正整数,第二个数字是一位仅可能为0到9间的整数。小美希望能将第二个插入第一个数字中,以得到最大的数字。具体可参见输入输出样例。

输入描述

单个测试用例包含T组数据

第一行一个数字表示T

对于每一组数据,包含一行有2个空格隔开的整数,表示任意正整数a和待插入的数字b。

1≤T≤10, 1≤a≤1050000, 0≤b≤9

输出描述

对于每组数据,输出一行,包括一个整数,得到的最大整数。

样例输入

4

76543 4

1 0

44 5

666 6

样例输出

765443

10

544

6666

参考题解

C++:

#include <iostream>
#include <string>

using namespace std;

int main() {
    int T;
    cin >> T;

    while (T--) {
        int a, b;
        cin >> a >> b;
        string s = to_string(a);

        for (int i = 0; i < s.length(); i++) {
            if (s[i] - '0' < b) {
                cout << s.substr(0, i) << b << s.substr(i) << endl;
                break;
            }
        }

        if (s.back() - '0' >= b) {
            cout << s << b << endl;
        }
    }

    return 0;
}

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();

        while (T-- > 0) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            String s = Integer.toString(a);

            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) - '0' < b) {
                    System.out.println(s.substring(0, i) + b + s.substring(i));
                    break;
                }
            }

            if (s.charAt(s.length() - 1) - '0' >= b) {
                System.out.println(s + b);
            }
        }
    }
}

Python:

T = int(input())
def solv():
    a, b = map(int, input().split(" "))
    s = str(a)
    for i in range(len(s)):
        if int(s[i]) < b:
            print(s[:i] + str(b) + s[i:])
            return
    print(s + str(b))

for i in range(T):
    solv()

第二题

题目:小美比赛

小美在参加送外卖比赛。比赛共有n个人参加,其中第 i 人的能力值为 i 。每个人有颜色黄或蓝。如果不同颜色对决,则能力大者赢。如果相同颜色对决,则能力小者赢。所有人都会两两比赛,请给出每个人能赢多少场。

输入描述

单个测试用例包含多组数据

第一行一个整数T,表示接下来有T组数据

对于每一组数据,包含两行数据,第一行是人数n。

第二行有n个数 ai(ai只会取0或1),0表示黄色,1表示蓝色。

数字间两两空格隔开。

1≤T≤5,1≤n≤50000,0≤ai≤1

输出描述

对于每组数据,输出一行,包括n个整数,每个整数表示每个人能赢多少场。

样例输入

2

3

0 0 1

4

1 0 1 0

样例输出

1 0 2

1 2 1 2

样例第一行为T,表示接下来有2组数据。其中第一组中,第一个人会赢第二个人,第三个人会赢前两个人,所以答案为1 0 2

参考题解

前缀和模拟即可。

C++:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int T;
    cin >> T;

    while (T--) {
        int n;
        cin >> n;
        vector<int> colors(n);

        for (int i = 0; i < n; i++) {
            cin >> colors[i];
        }

        vector<int> pres0(n + 1, 0);
        vector<int> pres1(n + 1, 0);

        for (int i = 1; i <= n; i++) {
            if (colors[i - 1] == 0) {
                pres0[i] = pres0[i - 1] + 1;
                pres1[i] = pres1[i - 1];
            } else {
                pres1[i] = pres1[i - 1] + 1;
                pres0[i] = pres0[i - 1];
            }
        }

        vector<int> res(n, 0);

        for (int i = 0; i < n; i++) {
            vector<int>& pre = (colors[i] == 0) ? pres0 : pres1;
            vector<int>& opre = (colors[i] == 0) ? pres1 : pres0;

            res[i] += opre[i];
            res[i] += pre[n] - pre[i + 1];
        }

        for (int i = 0; i < n; i++) {
            cout << res[i] << " ";
        }
        cout << endl;
    }

    return 0;
}

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();

        while (T-- > 0) {
            int n = scanner.nextInt();
            int[] colors = new int[n];

            for (int i = 0; i < n; i++) {
                colors[i] = scanner.nextInt();
            }

            int[] pres0 = new int[n + 1];
            int[] pres1 = new int[n + 1];

            for (int i = 1; i <= n; i++) {
                if (colors[i - 1] == 0) {
                    pres0[i] = pres0[i - 1] + 1;
                    pres1[i] = pres1[i - 1];
                } else {
                    pres1[i] = pres1[i - 1] + 1;
                    pres0[i] = pres0[i - 1];
                }
            }

            int[] res = new int[n];

            for (int i = 0; i < n; i++) {
               

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

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

Bug压路:老哥看得出来你是想多展示一些项目,但好像一般最多两个就够了😂页数一般一页,多的也就2页;这些项目应该是比较同质化的,和评论区其他大佬一样,我也觉得应该展示一些最拿手的(质量>数量)😁😁😁专业技能部分也可以稍微精简一些
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务