【秋招笔试】9.08字节跳动秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

✨ 本系列打算持续跟新 春秋招笔试题

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新

🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。

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

alt

🍠 字节dance秋招笔试,来啦!!!

🍥 本次代码的整体难度并不大,除了最后一题实现起来比较麻烦,其他三题应该都可以做

1️⃣ 简单的贪心+排序

2️⃣ 思维题,需要找到规律

3️⃣ 比较简单的树相关的题,DFS跑一遍就可以

4️⃣ 模拟+贪心,优先填入 2 x 2 的格子

💰 01.K小姐的购物策略

问题描述

K小姐是一位精明的购物爱好者。她有 张不同面额的购物卡,每张卡上都有一定金额。她发现一家商店正在进行一种特价商品的促销活动,每件特价商品的价格是 元。

K小姐计划每天使用一张购物卡购买尽可能多的特价商品,直到所有购物卡都无法再购买任何特价商品为止。在开始购物前,她可以向任意几张购物卡中充值,但总充值金额不能超过 元。

现在,K小姐想知道如果采用最优的充值策略,她最多能购买多少件特价商品。

输入格式

第一行包含三个整数 ,分别表示购物卡的数量、特价商品的单价和最大充值金额。

第二行包含 个整数 ,表示每张购物卡的初始金额。

输出格式

输出一个整数,表示K小姐最多能购买的特价商品数量。

样例输入

样例 1

5 3 2
4 4 3 1 2

样例 2

3 10 0
9 6 3

样例输出

样例 1

4

样例 2

0

数据范围

题解

排序

  1. 首先,计算不进行充值时能购买的商品数量。这可以通过将每张购物卡的 金额除以商品单价 并取整来得到。

  2. 对于 剩余的金额(每张卡的余额),需要考虑如何最有效地使用充值金额。最优策略是优先充值那些差额最小的购物卡,使其能够多购买一件商品。

  3. 将购物卡按余额从大到小排序。这样可以优先考虑那些只需要少量充值就能多买一件商品的卡。

  4. 遍历排序后的购物卡,如果充值金额足够使当前卡多买一件商品,就进行充值,并增加购买数量。

  5. 最后,如果还有剩余的充值金额,可以直接用来购买商品。

参考代码

  • Python
# 读取输入
n, k, m = map(int, input().split())
cards = list(map(int, input().split()))

# 计算初始可购买数量和余额
result = 0
remainders = []
for card in cards:
    result += card // k
    remainders.append(card % k)

# 对余额进行降序排序
remainders.sort(reverse=True)

# 遍历余额,进行充值
for remainder in remainders:
    if m >= k - remainder:
        result += 1
        m -= k - remainder
    else:
        break

# 使用剩余充值金额
result += m // k

# 输出结果
print(result)
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        long m = scanner.nextLong();
        
        long result = 0;
        List<Integer> remainders = new ArrayList<>();
        
        // 计算初始可购买数量和余额
        for (int i = 0; i < n; i++) {
            int card = scanner.nextInt();
            result += card / k;
            remainders.add(card % k);
        }
        
        // 对余额进行降序排序
        Collections.sort(remainders, Collections.reverseOrder());
        
        // 遍历余额,进行充值
        for (int remainder : remainders) {
            if (m >= k - remainder) {
                result++;
                m -= k - remainder;
            } else {
                break;
            }
        }
        
        // 使用剩余充值金额
        result += m / k;
        
        // 输出结果
        System.out.println(result);
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    // 读取输入
    long long n, k, m;
    cin >> n >> k >> m;
    
    long long result = 0;
    vector<int> remainders;
    
    // 计算初始可购买数量和余额
    for (int i = 0; i < n; i++) {
        long long card;
        cin >> card;
        result += card / k;
        remainders.push_back(card % k);
    }
    
    // 对余额进行降序排序
    sort(remainders.begin(), remainders.end(), greater<int>());
    
    // 遍历余额,进行充值
    for (int remainder : remainders) {
        if (m >= k - remainder) {
            result++;
            m -= k - remainder;
        } else {
            break;
        }
    }
    
    // 使用剩余充值金额
    result += m / k;
    
    // 输出结果
    cout << result << "\n";
    
    return 0;
}

🎵 02.LYA的魔法调音

问题描述

LYA是一位音乐魔法师,她有一个长度为 的音符序列。每个音符都有一个音高值,可能为正数、负数或零。LYA可以使用一种特殊的魔法:每次选择序列中的 个音符,将它们的音高值全部取反。LYA想知道,经过若干次魔法操作后,整个音符序列的音高值之和最大可以达到多少。

输入格式

第一行输入一个整数 ,表示魔法可以同时改变的音符数量。

第二行输入 个整数,表示音符序列中每个音符的音高值。

输出格式

输出一个整数,表示经过魔法操作后,音符序列的最大音高值之和。

样例输入

样例 1

3
-1 -2 3 -4 -5

样例输出

样例 1

15

数据范围

  • ,其中 表示每个音符的音高值

题解

思维题

如何 为偶数,且负数的个数为奇数个,则必然存在一个负数的情况。

其他情况均可变成所有都为正数

参考代码

  • Python
# 读取输入
n = int(input())
arr = list(map(int, input().split()))

# 记录负数的奇偶性并取绝对值
neg_count = 0
for i in range(len(arr)):
    if arr[i] < 0:
        neg_count ^= 1
        arr[i] = -arr[i]

# 计算总和
total = sum(arr)

# 处理特殊情况
if n % 2 == 0 and neg_count % 2 == 1:
    min_val = min(arr)
    total -= 2 * min_val

# 输出结果
print(total)
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        int n = scanner.nextInt();
        int[] arr = new int[2 * n - 1];
        
        // 记录负数的奇偶性并取绝对值
        boolean negCount = false;
        int minVal = Integer.MAX_VALUE;
        long total = 0;
        
        for (int i = 0; i < 2 * n - 1; i++) {
            arr[i] = scanner.nextInt();
            if (arr[i] < 0) {
                negCount = !negCount;
                arr[i] = -arr[i];
            }
            minVal = Math.min(minVal, arr[i]);
            total += arr[i];
        }
        
        // 处理特殊情况
        if (n % 2 == 0 && negCount) {
            total -= 2 * minVal;
        }
        
        // 输出结果
        System.out.println(total);
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    // 读取输入
    int n;
    cin >> n;
    vector<long long> arr(2 * n - 1);
    
    // 记录负数的奇偶性并取绝对值
    bool neg_count = false;
    for (auto& x : arr) {
        cin >> x;
        if (x < 0) {
            neg_count = !neg_count;
            x = -x;
        }
    }
    
    // 计算总和
    long long total = accumulate(arr.begin(), arr.end(), 0LL);
    
    // 处理特殊情况
    if (n % 2 == 0 && neg_count) {
        long long min_val = *min_element(arr.begin(), arr.end());
        total -= 2 * min_val;
    }
    
    // 输出结果
    cout << total << "\n";
    
    return 0;
}

🌲 03.奇妙树的修复

问题描述

LYA 是一位热爱园艺的少女,她最近在打理一棵特殊的树。这棵树有 个节点,每个节点都有一个魔力值 。LYA 发现,如果每个节点的魔力值都大于或等于其所有子节点的魔力值之和,这棵树就会散发出奇妙的光芒,她称之为"奇妙树"。

为了让这棵树变成奇妙树,LYA 可以对任意节点施加魔法,每次魔法可以使该节点的魔力值增加 1。LYA 想知道,最少需要施展多少次魔法,才能让这棵树变成奇妙树。

输入格式

第一行包含一个整数 ,表示树的节点数。

第二行包含 个整数 ,表示每个节点的初始魔力值。

接下来 行,每行包含两个整数 ,表示节点 和节点 之间存在一条边。

输出格式

输出一个整数,表示 LYA 最少需要施展的魔法次数。

样例输入

3
1 2 3
1 2
1 3

样例输出

4

数据范围

题解

贪心 + DFS

  1. 理解奇妙树:在奇妙树中,每个节点的魔力值必须大于或等于其所有子节点的魔力值之和。我们需要从叶子节点开始,自底向上地调整魔力值。

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

互联网春秋招笔试题汇总 文章被收录于专栏

这里收集了超全的互联网春秋招笔试题,欢迎大家的订阅,会持续跟新的

全部评论

相关推荐

贝壳入职碎碎念:&nbsp;&nbsp;&nbsp;&nbsp;讲实话,刚入职贝壳时,给我印象最深的不是公司文化,而是“企业微信”居然没有已读功能。那时候我真的挺不理解的,为啥连这么基本的功能都没有。现在想想,企微没有已读功能反而是一种最大的善意。一个产品不一定是功能越多越好,放过别人一马就是放过自己一马。这也让我意识到,职场中有些事情,不是只有表面的那样,懂的人自然明白其中的奥妙。&nbsp;&nbsp;&nbsp;&nbsp;刚入职时,我真的是一脸懵,环境和之前完全不一样。我提前实习,领导说实习是用来感受团队氛围的,那段日子真的挺轻松。公司有专门的课程,每天就是看看课程,熟悉业务代码和流程。有需求时也没有紧迫的截止日期(现在回想起来,这其实是对实习生的特殊优待)。到点了大家一起去吃饭,正式员工的工作安排得很有序,但也不会给实习生太大的压力。&nbsp;&nbsp;&nbsp;&nbsp;那个时候还没有GPT,不懂的问题需要花更多时间去查,幸好大家不push,我可以慢慢学习,一步步积累经验。现在再看看那些当时觉得棘手的问题,其实都挺简单的,但那段经历却让我在不知不觉中成长了不少。&nbsp;&nbsp;&nbsp;&nbsp;谁没写过bug呢?我也写过线上bug,那时候全组的同事都很紧张,但都安慰我说出bug不要紧,有bug才有更多的成长。----------------------手动贝壳🐚分割线--------------------------------------------公司福利:免费三餐&nbsp;、六险二金、超长年假、校招生专属礼盒、节日礼盒....工区环境:食堂、便利店、水果店、咖啡店、健身房、淋浴间、睡眠室一应俱全ADC培养:老司机1V1带教、校招生专属培训、线上学习平台、贝壳公开课...福利详细介绍:1.&nbsp;一日三餐没烦恼,食堂到店应有尽有,清真的,麻辣的,减肥轻食的,酸奶小水果啥都有2.&nbsp;一分钱可乐无限喝:快乐水虽好,可不好贪凉哦~3.&nbsp;各种公开课活动享不停:新人炉石营苏州一起玩~各种新鲜课程每天都能报名!4.&nbsp;中午休息也能睡觉,睡眠室供应,有被子有空调!5.&nbsp;工位超大!环境超好,大内存电脑干啥都得劲!6.&nbsp;贝壳还管找对象?定期联谊活动,祝你找到真爱!7.&nbsp;过年回来还发红包?打开就有惊喜!,18还是28,能不能开出来588?职位列表(研发,产品,运营,人力等等应有尽有~)1.&nbsp;Java开发工程师2.&nbsp;NLP算法工程师3.&nbsp;机器学习算法工程师4.&nbsp;前端开发工程师5.&nbsp;Golang开发工程师6.&nbsp;测试开发工程师7.&nbsp;大数据开发工程师8.&nbsp;图像算法工程师9.&nbsp;风控算法工程师10.&nbsp;人力资源管理(薪酬绩效)11.&nbsp;人力资源管理(人才发展)12.&nbsp;产品运营13.&nbsp;产品经理14.&nbsp;Android开发工程师15.&nbsp;iOS开发工程师16.C++开发工程师投递之前填写我的推荐码:ISVP3A&nbsp;推荐码:ISVP3A&nbsp;推荐码:ISVP3A&nbsp;贝壳等你来哦~
贝壳找房
|
校招
|
56个岗位
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务