美团笔试 美团实习 0401

笔试时间:2023年04月01日

第一题

题目:算数

小美在数学课上学会了加减乘除,现在她想多进行一些算数训练来加强自己的计算能力。为了不重复出题,她想出一个好方法。她先写下了一排n个数(n≥2),依次用加号连接。举例来说,小美可能写下了如下的式子1+4+7+4+2+3+1共7个数以及6个加号。接着小美以一种全新的方式进行出题:她每次选择一个加号,将它改变成加减乘除中的一个(虽然很奇怪,但小美认为加号也可以被改成加号,尽管不会产生任何影响),然后计算整个式子的结果。值得注意的是,小美认为每次操作不对后续操作产生影响,详见样例解释。小美认真做了很多次算数训练,现在她想让作为她好朋友的你帮她用程序计算一次,方便她核对答案。

输入描述

第一行一个整数n,含义见题面。

接下来一行n个整数a1,a2,..,an,依次表示小美初始写下的连加算式中的每一个数。

接下来一个整数m,表示小美做了m次算数训练

接下来2m个以空格分开数字或符号 t1,o1, t2,o2, ... tm,om,其中ti为数字,oi是'+','-','*','/'(即加减乘除符号,不含引号)中的一个符号,表示第 i 次操作选定了第ti个加号,将其改变为了oi。

对于所有的的数据,2≤N≤50000,1≤M≤50000,1≤ai≤500,1≤ti<N,oi∈{+,-,*,/}

输出描述

输出一行m个整数,分别表示每次操作的答案,结果四舍五入到一位小数。

样例输入

5

1 2 4 2 5

3

1 - 2 * 4 /

样例输出

10.0 16.0 7.4

解释:

第一次操作后算数式为1-2+4+2+5 = 10.0

第二次操作后算数式为1+2*4+2+5 = 16.0

第三次操作后算数式为1+2+4+2/5 = 7.4

值得注意的是,每次操作都认为对初始的全加号式子(此处为1+2+4+2+5)进行操作,操作之间互不影响。

参考题解

按照题意模拟。

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

#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

double perform_operation(int a, int b, char op) {
    switch (op) {
        case '+':
            return a + b;
        case '-':
            return a - b;
        case '*':
            return a * b;
        case '/':
            return static_cast<double>(a) / b;
        default:
            return 0;
    }
}

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

    // 计算原始算式的结果
    int original_sum = 0;
    for (int i = 0; i < n; ++i) {
        original_sum += nums[i];
    }

    int m;
    cin >> m;
    vector<int> t(m);
    vector<char> op(m);
    for (int i = 0; i < m; ++i) {
        cin >> t[i] >> op[i];
    }

    cout << fixed << setprecision(1);
    for (int i = 0; i < m; ++i) {
        int index = t[i] - 1;
        char operation = op[i];
        double result = original_sum - nums[index] - nums[index + 1];
        result += perform_operation(nums[index], nums[index + 1], operation);
        cout << result << " ";
    }

    return 0;
}

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

import java.util.Scanner;

public class Main {
    public static double performOperation(int a, int b, char op) {
        switch (op) {
            case '+':
                return a + b;
            case '-':
                return a - b;
            case '*':
                return a * b;
            case '/':
                return (double) a / b;
            default:
                return 0.0;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; ++i) {
            nums[i] = scanner.nextInt();
        }

        // 计算原始算式的结果
        int originalSum = 0;
        for (int i = 0; i < n; ++i) {
            originalSum += nums[i];
        }

        int m = scanner.nextInt();
        int[] t = new int[m];
        char[] op = new char[m];
        for (int i = 0; i < m; ++i) {
            t[i] = scanner.nextInt();
            op[i] = scanner.next().charAt(0);
        }

        for (int i = 0; i < m; ++i) {
            int index = t[i] - 1;
            char operation = op[i];
            double result = originalSum - nums[index] - nums[index + 1];
            result += performOperation(nums[index], nums[index + 1], operation);
            System.out.printf("%.1f ", result);
        }
    }
}

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

def perform_operation(a, b, op):
    if op == '+':
        return a + b
    elif op == '-':
        return a - b
    elif op == '*':
        return a * b
    elif op == '/':
        return float(a) / b
    else:
        return 0.0

def main():
    n = int(input())
    nums = list(map(int, input().split()))

    # 计算原始算式的结果
    original_sum = sum(nums)

    m = int(input())
    t = []
    op = []
    for _ in range(m):
        ti, opi = input().split()
        t.append(int(ti))
        op.append(opi)

    for i in range(m):
        index = t[i] - 1
        operation = op[i]
        result = original_sum - nums[index] - nums[index + 1]
        result += perform_operation(nums[index], nums[index + 1], operation)
        print("{:.1f}".format(result), end=" ")

if __name__ == "__main__":
    main()

第二题

题目:整理

小美正在整理桌子上的一排装饰品。小美对待装饰品摆放方式的审美角度很奇特,她认为高度相差比较大的装饰品放在相邻位置会很难看,她想对这一排装饰品进行整理,可以交换任意两个装饰品的位置任意多次。假设当前从左到右n个装饰品的高度分别为h1,h2,...,hn,那么当前一排装饰品的丑陋值为\sum_{i=1}^{n-1}{\left| h_{i} - h_{i+1} \right|},其中|x|为x的绝对值。小美想最小化她的装饰品的丑陋值,请你帮她排一下顺序。形式化地来讲,有一长为n的序列a1,a2,...,an,你可以任意次数地进行交换,每次交换都可以选择任意两个不同的数i,j,交换ai,aj的位置。经过若干次交换后,序列变为h1,h2,...,hn,其丑陋值为\sum_{i=1}^{n-1}{\left| h_{i} - h_{i+1} \right|},你需要找出一种交换方式,使得最终序列{hn}的丑陋值最小化。你不需要输出具体交换方式,只需要输出最终的{hn}序列的丑陋值即可。

输入描述

第一行一个整数n,表示小美的装饰品数量。

接下来一行n个整数a1,a2,...,an,依次表示从左到右n个装饰品的高度。

对于所有的数据:2≤N≤50000,0≤ai≤10^9。

输出描述

输出第一行一个数,为最优方案的最小丑陋值。

样例输入

3 3 1 2

样例输出

2

提示:

我们可以将3和1交换,得到1 3 2然后再将2和3交换,得到1 2 3可以证明,此时有最小丑陋值|1-2|+|2-3|=2

参考题解

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

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

int main() {
    int n;
    cin >> n;
    vector<int> a(n);

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

    sort(a.begin(), a.end());

    int res = 0;
    for (int i = 0; i < n - 1; ++i) {
        res += a[i + 1] - a[i];
    }

    cout << res << endl;

    return 0;
}

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

import java.util.Arrays;
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 = new int[n];

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

        Arrays.sort(a);

        int res = 0;
  

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

春招实习笔试合集 文章被收录于专栏

字节、阿里、腾讯、华为、美团等春招实习笔试题汇总

全部评论
mark
点赞 回复
分享
发布于 03-25 21:43 江苏
Mark
点赞 回复
分享
发布于 03-25 21:55 江苏
滴滴
校招火热招聘中
官网直投
Mark
点赞 回复
分享
发布于 03-25 22:25 江苏
Mark
点赞 回复
分享
发布于 03-25 22:42 江苏
Mark
点赞 回复
分享
发布于 03-25 22:49 江苏
Mark
点赞 回复
分享
发布于 03-25 23:01 江苏
Mark
点赞 回复
分享
发布于 03-25 23:16 江苏
Mark
点赞 回复
分享
发布于 03-25 23:26 江苏
Mark
点赞 回复
分享
发布于 03-25 23:38 江苏
Mark
点赞 回复
分享
发布于 03-25 23:51 江苏

相关推荐

11 11 评论
分享
牛客网
牛客企业服务