【秋招笔试】2025.08.24得物秋招笔试第一套改编题

✅ 秋招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线140+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

题目一:小兰的烘焙工坊配方调试

1️⃣:通过数学推导建立平均值等式

2️⃣:分情况讨论,贪心选择最少添加数量

难度:中等

这道题目的关键在于理解平均值的数学性质,通过建立等式 来推导最优解。核心思想是分类讨论:当原数组平均值已经为 1 时无需添加;当总和过大时添加足够的 0 来稀释;当总和过小时只需添加一个适当的正数。

题目二:小基的魔法宝石收集

1️⃣:识别能提供额外机会的宝石并优先收集

2️⃣:对剩余宝石按法力值排序,贪心选择最优宝石

3️⃣:利用数学计算剩余施法机会数量

难度:中等

这道题目结合了贪心策略和优先级排序。关键观察是任何能提供额外施法机会的宝石都应该优先收集,然后在剩余的机会中贪心地选择法力值最高的宝石。通过两阶段策略,可以保证获得最大的总法力值。

01. 小兰的烘焙工坊配方调试

问题描述

小兰是一位热爱烘焙的糕点师,她的工坊里有一个神奇的烘焙秘方。根据传统工艺,只有当所有原料的营养指数平均值恰好为 时,才能制作出最完美的糕点。

小兰手上有 种不同的原料,每种原料都有对应的营养指数(可能为负数,表示某些原料需要特殊处理)。为了达到完美的配方标准,她可以向配方中添加任意数量的辅助材料,这些辅助材料的营养指数都是非负整数。

现在小兰想知道,为了让配方达到完美标准(即所有材料营养指数的平均值为 ),她最少需要添加多少种辅助材料?

输入格式

第一行包含一个正整数 ,表示现有原料的种类数。

第二行包含 个整数 ,表示每种原料的营养指数。

输出格式

输出一个整数,表示最少需要添加的辅助材料种类数。

样例输入

3
1 1 1
3
1 2 3

样例输出

0
3

数据范围

样例编号 解释说明
样例1 现有3种原料,营养指数都是1,平均值已经是1,无需添加辅助材料
样例2 现有3种原料,营养指数为1,2,3,总和为6。添加3种营养指数为0的辅助材料后,总和仍为6,共6种材料,平均值为1

题解

这道题的核心思想是通过数学推导来找到最优解。

设原有 种原料,营养指数总和为 。我们需要添加 种辅助材料,这些材料的营养指数总和为 (由于都是非负数,所以 )。

要让平均值为 ,需要满足:

整理得到:,即

分析不同情况:

  1. 已经完美:如果 ,说明平均值已经是 ,答案为

  2. 需要调整:如果 ,必须添加至少 种辅助材料来改变平均值。

    • 由于 ,需要 ,即
    • 时,最小的
    • 时,取 就能满足条件(此时

通过这种分析,我们可以在 时间内计算出答案,只需要求出原料营养指数的总和即可。

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

# 读取原料数量
n = int(input())
# 读取各原料的营养指数
nums = list(map(int, input().split()))

# 计算营养指数总和
total = sum(nums)

# 根据数学推导计算最少添加的辅助材料数量
if total == n:
    # 平均值已经是1,无需添加
    res = 0
elif total > n:
    # 总和过大,需要添加足够多的0来稀释
    res = total - n
else:
    # 总和过小,添加1个合适的正数即可
    res = 1

print(res)
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    
    // 计算所有原料营养指数的总和
    long long sum = 0;
    for (int i = 0; i < n; i++) {
        int val;
        cin >> val;
        sum += val;
    }
    
    // 根据总和与n的关系确定答案
    long long ans;
    if (sum == n) {
        // 平均值恰好为1
        ans = 0;
    } else if (sum > n) {
        // 需要添加零值辅助材料来降低平均值
        ans = sum - n;
    } else {
        // 添加一个合适的正值辅助材料
        ans = 1;
    }
    
    cout << ans << endl;
    return 0;
}
  • Java
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 读取原料种类数
        int n = Integer.parseInt(br.readLine());
        
        // 读取营养指数并计算总和
        String[] parts = br.readLine().split(" ");
        long totalSum = 0;
        for (int i = 0; i < n; i++) {
            totalSum += Integer.parseInt(parts[i]);
        }
        
        // 计算最少需要添加的辅助材料数量
        long result;
        if (totalSum == n) {
            // 平均值已经等于1
            result = 0;
        } else if (totalSum > n) {
            // 总和过大,需要用零值材料稀释
            result = totalSum - n;
        } else {
            // 

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

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务