【备战秋招】每日一题:4月23日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站(含题解)
www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。

提交链接:

https://codefun2000.com/p/P1138

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

在线评测链接:P1245

题目内容

塔子哥是一个热爱学习的大学生,他的梦想是成为一名优秀的算法竞赛高手。为了实现自己的梦想,他需要获得奖学金,以便有足够的时间和资金去参加各种比赛和训练。但是,塔子哥所在的学校对于奖学金的评定非常严格,要求塔子哥必须保持优异的成绩。

塔子哥总共修习了 n 门课程,每门课程都有一个学分 a_i,表示这门课程的重要程度。而这门课塔子哥的成绩是b_i,表示塔子哥在这门课程上的表现。塔子哥所在学校对于奖学金的评定非常简单:只要所有课程的均分不低于一个给定的标准 X ,而且没有任何课程挂科,就可以申请奖学金。均分是指所有课程的成绩按照学分加权的平均值,而一门课程挂科即该课成绩低于 60 分。

现在塔子哥想要知道,在每种课业情况下他能否申请奖学金。他会给你总共若干次询问,每次询问他会告诉你他修习了哪些课程,每门课程的学分和成绩,以及奖学金的评定标准 X 。你需要帮助塔子哥判断,在每次询问中,他是否满足申请奖学金的条件。

输入描述

第一行有一个正整数 T(1 \leq T \leq 100) ,表示询问次数;

对于每组询问中:

第一行有两个正整数 n(1\leq n \leq 10^2), X(1 \leq X \leq 100) 表示有几门课和评定标准;

第二行中有 n 个正整数 a_i 表示每一科的学分; (1 \leq a_i \leq 100)

第三四行有 n 个正整数 b_i 表示每一科的成绩。 (1 \leq b_i \leq 100)

输出描述

输出为对于每次询问,输出 Yes 或者 No 表示能或不能申请奖学金。

样例

输入

3
5 97
5 4 8 2 4
72 92 64 96 100
5 87
1 7 7 3 8
64 69 98 72 91
5 61
10 7 8 2 3
100 83 72 91 63

输出

No
No
Yes

思路

模拟

模拟题,累加学分加权总和并判断是否达到要求即可。

时间复杂度:O(n)

类似题目推荐

本题比较简单。

LeetCode

周赛/双周赛 第一题

Codefun2000

  1. 美的 P1232. 2023.04.19-笔试-第一题-交换数值

  2. P1174 华为od 2023.04.08--第一题-箱子之形摆放

  3. P1166 美团 2023.04.08-第一题-换座位

  4. P1245 美团 2023.04.23-春招-第一题-申请奖学金

代码

CPP

#include 
using namespace std;
​
const int N = 110;
int a[N];
​
void solve() {
    int n, x, sum = 0, sums = 0;
    bool ok = true;
​
    cin >> n >> x;
​
    // 计算学分总和
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        sums += a[i];
    }
​
    // 计算学分×分数总和
    for (int i = 0; i < n; ++i) {
        int y; cin >> y;
        if (y < 60) ok = false;
        sum += y * a[i];
    }
​
    // 有小于 60 分的课程
    if (!ok) cout << "No\n";
    else {
        // 课程加权平均分小于 x
        if (sum < sums * x) cout << "No\n";
        else cout << "Yes\n";
    }
}
​
int main()
{
    int T = 1;
    cin >> T;
    while (T--) {
        solve();
    }
​
    return 0;
}

python

T = int(input())
while T > 0:
    n, x = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
​
    # 遍历找是否存在一门课程的分数小于 60 分
    ok = True
    for i in range(n):
        if b[i] < 60:
            ok = False
            break
​
    # 课程存在一门课程小于 60分
    if not ok:
        print("No")
    else:
        # 课程加权平均分小于 x
        if sum(a[i] * b[i] for i in range(n)) < sum(a) * x:
            print("No")
        else:
            print("Yes")
​
    T -= 1
​

Java

import java.util.*;
​
public class Main {
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
​
        int T = sc.nextInt();
        while (T-- > 0) {
            int n = sc.nextInt(), x = sc.nextInt();
            int[] a = new int[n];
            int[] b = new int[n];
​
            for (int i = 0; i < n; ++i) a[i] = sc.nextInt();
            for (int i = 0; i < n; ++i) b[i] = sc.nextInt();
​
            boolean ok = true;
            // 遍历找是否存在一门课程的分数小于 60 分
            for (int i = 0; i < n; ++i) {
                if (b[i] < 60) {
                    ok = false;
                    break;
                }
            }
​
            if (!ok) {
                // 课程存在一门课程小于 60分
                System.out.println("No");
            } else {
                int sum = 0;
                int sumc = 0;
                // 计算a[i] * b[i] 总和以及学分总和
                for (int i = 0; i < n; ++i) {
                    sum += a[i] * b[i];
                    sumc += a[i];
                }
                if (sum < sumc * x) {
                    // 课程加权平均分小于 x
                    System.out.println("No");
                } else {
                    System.out.println("Yes");
                }
            }
        }
    }
}

Go

package main
​
import "fmt"
​
const N = 110
​
func main() {
    var T int
    fmt.Scan(&T)
​
    for T > 0 {
        T -= 1
​
        var n, x int
        a := make([]int, N)
        fmt.Scan(&n, &x)
​
        sums := 0
        for i := 0; i < n; i++ {
            fmt.Scan(&a[i])
            sums += a[i]
        }
​
        ok := true
        sum := 0
        for i := 0; i < n; i++ {
            var y int
            fmt.Scan(&y)
            // 计算a[i] * b[i] 总和以及学分总和
            sum += a[i] * y
            // 遍历找是否存在一门课程的分数小于 60 分
            if y < 60 {
                ok = false
            }
        }
​
        if !ok {
            // 课程存在一门课程小于 60分
            fmt.Println("No")
        } else {
            // 课程加权平均分小于 x
            if sum < sums*x {
                fmt.Println("No")
            } else {
                fmt.Println("Yes")
            }
        }
    }
}
​

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
    input += data;
    return;
});
process.stdin.on('end', () => {
    const lines = input.trim().split('\n');
    let T = parseInt(lines[0]);
​
    for (let i = 1, t = 1; i <= T; i++) {
        const [n, x] = lines[t++].trim().split(' ').map(Number);
        const a = lines[t++].trim().split(' ').map(Number);
        const b = lines[t++].trim().split(' ').map(Number);
​
        // 遍历找是否存在一门课程的分数小于 60 分
        let ok = true;
        for (let j = 0; j < n; j++) {
            if (b[j] < 60) {
                ok = false;
                break;
            }
        }
​
        // 课程存在一门课程小于 60 分
        if (!ok) {
            console.log("No");
        } else {
            // 课程加权平均分小于 x
            if (a.reduce((acc, cur, i) => acc + cur * b[i], 0) < sum(a) * x) {
                console.log("No");
            } else {
                console.log("Yes");
            }
        }
    }
});
​
function sum(arr) {
    return arr.reduce((acc, cur) => acc + cur, 0);
}

你可能感兴趣的:(备战2023秋招,java,c++,javascript,python,算法)