【秋招突围】2024届秋招笔试-科大讯飞笔试题-03-三语言题解(Java/Cpp/Python)

news2024/11/18 13:28:15

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系计划跟新各公司春秋招的笔试题

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注CSDN同名公主号领取,会在飞书进行同步的跟新。

文章目录

    • 📖 写在前面
      • 夏天要来了 秋招还会远吗?
    • 🍄 01.卢小姐的蛋糕分享
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎧 02.字符串的魔法变换
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🍿 03.LYA 的魔法项链
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎀 写在最后
    • 🛖 这里介绍一下咱们的笔试打卡小屋
      • 🥰 打卡奖励
      • 🕰 每日学习安排
      • 📖 打卡小屋涉及题型
        • 基础算法
        • 基础数据结构
        • 搜索
        • 动态规划 & 贪心 & 数论

📖 写在前面

夏天要来了 秋招还会远吗?

前不久春招也算是圆满结束咯,大家有拿到心仪的 offer吗?
接下来互联网的秋招也快来啦,小伙伴们有开始准备了吗?
本次给大家带来24届秋招 阿里系 的笔试题目三语言解析(Java/Python/Cpp)

文末有清隆学长的笔试陪伴打卡小屋活动介绍:
✨丰富的打卡奖励等你来领哦,大厂笔试题汇总笔试面试经验贴算法笔试模版
💽 有兴趣的小伙伴们也可以了解一下,不要错过啦~

在这里插入图片描述

🍄 01.卢小姐的蛋糕分享

问题描述

卢小姐今天烤了一个蛋糕,打算和朋友们一起分享。蛋糕被切成了 B B B 块,卢小姐自己先拿走了 A A A 块。现在,卢小姐想知道,剩下的蛋糕占整个蛋糕的比例是多少。

换句话说,给定两个正整数 A A A B B B,请计算 1 − A B 1 - \frac{A}{B} 1BA 的值,并以分数的形式输出,分子和分母之间用空格隔开。

输入格式

输入一行,包含两个正整数 A A A B B B,表示卢小姐拿走的蛋糕块数和蛋糕总块数,数据之间用空格隔开。

输出格式

输出一行,包含两个整数,表示 1 − A B 1 - \frac{A}{B} 1BA 的值,分子和分母之间用空格隔开。注意,输出的分母必须为 B B B

样例输入

6 11

样例输出

5 11

数据范围

1 ≤ A < B ≤ 1 0 3 1 \le A < B \le 10^3 1A<B103

题解

根据题目要求,我们需要计算 1 − A B 1 - \frac{A}{B} 1BA 的值,并以分数形式输出。我们可以通过以下步骤求解:

  1. 1 1 1 转化为 B B \frac{B}{B} BB 的形式。
  2. 计算 B B − A B \frac{B}{B} - \frac{A}{B} BBBA,得到 B − A B \frac{B-A}{B} BBA
  3. 输出 B − A B-A BA B B B,即为所求分数的分子和分母。

时间复杂度: O ( 1 ) O(1) O(1)
空间复杂度: O ( 1 ) O(1) O(1)

参考代码

  • Python
a, b = map(int, input().split())
print(b - a, b)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println((b - a) + " " + b);
    }
}
  • Cpp
#include <iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << b - a << " " << b << endl;
    return 0;
}

🎧 02.字符串的魔法变换

问题描述

LYA 是一个喜欢研究字符串的女孩。她发现,如果将一个字符串 S S S 中的某一段子串 S [ L , R ] S[L,R] S[L,R] 进行翻转,可以得到一个新的字符串。例如,将字符串 abcdefg 的子串 cdef 进行翻转,可以得到新字符串 abfedcg

现在,LYA 有两个长度均为 n n n 的字符串 A A A B B B,她想知道是否可以通过对字符串 A A A 执行 恰好一次 上述的子串翻转操作,使其变成字符串 B B B。如果可以,请求出有多少种不同的翻转方案。

输入格式

第一行包含一个正整数 n n n,表示字符串的长度。

第二行包含一个长度为 n n n 的字符串 A A A

第三行包含一个长度为 n n n 的字符串 B B B

输出格式

输出一个整数,表示将字符串 A A A 变成字符串 B B B 的不同翻转方案数。如果无法通过一次翻转实现,则输出 0 0 0

样例输入

6
abcdef
afedcb

样例输出

1

数据范围

  • 1 ≤ n ≤ 1 0 4 1 \le n \le 10^4 1n104
  • 字符串 A A A B B B 仅包含小写字母

题解

本题可以通过双指针来解决。

首先,我们可以从字符串 A A A B B B 的左右两端开始比较,找到第一个不同的字符位置 l l l 和最后一个不同的字符位置 r r r。如果 A [ l , r ] A[l,r] A[l,r] 翻转后与 B [ l , r ] B[l,r] B[l,r] 相同,那么就有可能通过一次翻转实现从 A A A B B B 的转换。

接下来,我们验证 A [ l , r ] A[l,r] A[l,r] 翻转后是否与 B [ l , r ] B[l,r] B[l,r] 完全相同。如果不同,说明无法通过一次翻转实现转换,输出 0 0 0

如果 A [ l , r ] A[l,r] A[l,r] 翻转后与 B [ l , r ] B[l,r] B[l,r] 相同,我们就找到了一种翻转方案。然后,我们可以尝试扩展这个翻转区间,将 l l l 向左移动, r r r 向右移动,并比较 A [ l ] A[l] A[l] A [ r ] A[r] A[r] 是否相等。如果相等,那么这也是一种合法的翻转方案,翻转区间可以继续扩展。直到 l l l r r r 到达字符串边界或者 A [ l ] ≠ A [ r ] A[l] \ne A[r] A[l]=A[r] 时,扩展停止。

最后,输出累计的翻转方案数即可。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)

参考代码

  • Python
def solve(n, a, b):
    l = 0
    r = n - 1
    while l < n and a[l] == b[l]:
        l += 1
    while r >= 0 and a[r] == b[r]:
        r -= 1
    
    if l > r:
        return 1
    
    left, right = l, r
    while left <= r:
        if a[left] != b[right]:
            return 0
        left += 1
        right -= 1
    
    ans = 1
    l -= 1
    r += 1
    while l >= 0 and r < n:
        if a[l] == a[r]:
            ans += 1
            l -= 1
            r += 1
        else:
            break
    
    return ans

n = int(input())
a = input()
b = input()
print(solve(n, a, b))
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String a = sc.next();
        String b = sc.next();
        System.out.println(solve(n, a, b));
    }

    private static int solve(int n, String a, String b) {
        int l = 0;
        int r = n - 1;
        while (l < n && a.charAt(l) == b.charAt(l)) {
            l++;
        }
        while (r >= 0 && a.charAt(r) == b.charAt(r)) {
            r--;
        }
        
        if (l > r) {
            return 1;
        }
        
        int left = l;
        int right = r;
        while (left <= r) {
            if (a.charAt(left) != b.charAt(right)) {
                return 0;
            }
            left++;
            right--;
        }
        
        int ans = 1;
        l--;
        r++;
        while (l >= 0 && r < n) {
            if (a.charAt(l) == a.charAt(r)) {
                ans++;
                l--;
                r++;
            } else {
                break;
            }
        }
        
        return ans;
    }
}
  • Cpp
#include <iostream>
#include <string>

using namespace std;

int solve(int n, string a, string b) {
    int l = 0;
    int r = n - 1;
    while (l < n && a[l] == b[l]) {
        l++;
    }
    while (r >= 0 && a[r] == b[r]) {
        r--;
    }
    
    if (l > r) {
        return 1;
    }
    
    int left = l;
    int right = r;
    while (left <= r) {
        if (a[left] != b[right]) {
            return 0;
        }
        left++;
        right--;
    }
    
    int ans = 1;
    l--;
    r++;
    while (l >= 0 && r < n) {
        if (a[l] == a[r]) {
            ans++;
            l--;
            r++;
        } else {
            break;
        }
    }
    
    return ans;
}

int main() {
    int n;
    string a, b;
    cin >> n >> a >> b;
    cout << solve(n, a, b) << endl;
    return 0;
}

🍿 03.LYA 的魔法项链

问题描述

LYA 是一位热爱魔法的少女。她拥有一条由 n n n 颗宝石组成的魔法项链,每颗宝石都有自己的颜色。然而,这条项链的魔力只有在所有宝石颜色相同时才能释放。

为了激活项链的魔力,LYA 可以使用魔法来移除项链上的一些宝石。每次移除操作需要选择项链上若干个位置不相邻的宝石进行移除。LYA 希望在项链变得只有一种颜色的宝石时,所需的移除操作次数最少。

现在,LYA 想知道,对于给定的项链长度 n n n 和移除操作次数 k k k,有多少种可能的初始项链状态。由于答案可能很大,请帮助 LYA 构造任意一种满足条件的初始项链状态。

输入格式

输入一行,包含两个以空格分隔的正整数 n n n k k k,分别表示项链的长度和移除操作的次数。

输出格式

输出一个长度为 n n n 的字符串,仅由小写字母构成,表示一种满足条件的初始项链状态。如果不存在满足条件的项链状态,则输出 − 1 -1 1

样例输入

6 2

样例输出

abcabc

数据范围

  • 1 ≤ k ≤ n ≤ 2 × 1 0 5 1 \leq k \leq n \leq 2 \times 10^5 1kn2×105

题解

这道题可以通过构造的方法来解决。我们可以先确定最终项链的颜色,然后在初始项链中添加一些其他颜色的宝石,使得移除操作的次数恰好等于 k k k

具体步骤如下:

  1. 计算需要移除的宝石数量 d e l e t e C o u n t = 2 k − 1 deleteCount = 2^{k-1} deleteCount=2k1

  2. 计算最终剩余的宝石数量 s u r v i v o r C o u n t = n − d e l e t e C o u n t survivorCount = n - deleteCount survivorCount=ndeleteCount。如果 s u r v i v o r C o u n t < 1 survivorCount < 1 survivorCount<1,说明无解,输出 − 1 -1 1

  3. 将初始项链分成若干组,每组的大小为 d e l e t e C o u n t deleteCount deleteCount。如果 d e l e t e C o u n t > s u r v i v o r C o u n t deleteCount > survivorCount deleteCount>survivorCount,则将组数加倍,组的大小减半,直到组的大小不大于 s u r v i v o r C o u n t survivorCount survivorCount

  4. 对于每一组,使用不同的字母填充,保证组内字母相同,组间字母不同。

  5. 在项链的末尾,再添加 s u r v i v o r C o u n t survivorCount survivorCount 个与最后一组不同的字母,作为最终剩余的宝石。

以上步骤可以构造出一种满足条件的初始项链状态。时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n)

参考代码

  • Python
n, k = map(int, input().split())

delete_count = 1 << (k - 1)
survivor_count = n - delete_count
if survivor_count < 1:
    print(-1)
else:
    group_count = 1
    group_size = delete_count
    while group_size > survivor_count:
        group_count *= 2
        group_size = delete_count // group_count
    
    result = []
    for i in range(group_count):
        for j in range(group_size):
            result.append(chr(ord('a') + i))
    
    survivor = chr(ord(result[-1]) + 1)
    result.extend([survivor] * survivor_count)
    
    print(''.join(result))
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        
        int deleteCount = 1 << (k - 1);
        int survivorCount = n - deleteCount;
        if (survivorCount < 1) {
            System.out.println(-1);
        } else {
            int groupCount = 1;
            int groupSize = deleteCount;
            while (groupSize > survivorCount) {
                groupCount *= 2;
                groupSize = deleteCount / groupCount;
            }
            
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < groupCount; i++) {
                for (int j = 0; j < groupSize; j++) {
                    result.append((char) ('a' + i));
                }
            }
            
            char survivor = (char) (result.charAt(result.length() - 1) + 1);
            for (int i = 0; i < survivorCount; i++) {
                result.append(survivor);
            }
            
            System.out.println(result.toString());
        }
    }
}
  • Cpp
#include <iostream>
#include <string>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    
    int deleteCount = 1 << (k - 1);
    int survivorCount = n - deleteCount;
    if (survivorCount < 1) {
        cout << -1 << endl;
    } else {
        int groupCount = 1;
        int groupSize = deleteCount;
        while (groupSize > survivorCount) {
            groupCount *= 2;
            groupSize = deleteCount / groupCount;
        }
        
        string result;
        for (int i = 0; i < groupCount; i++) {
            for (int j = 0; j < groupSize; j++) {
                result.push_back('a' + i);
            }
        }
        
        char survivor = result.back() + 1;
        for (int i = 0; i < survivorCount; i++) {
            result.push_back(survivor);
        }
        
        cout << result << endl;
    }
    
    return 0;
}

🎀 写在最后

🛖 这里介绍一下咱们的笔试打卡小屋

✨ 打卡小屋旨在陪伴大家,养成每日学习的好习惯。在这里,你可以:

  • 🤝 与备战笔试的小伙伴相识,找到志同道合的学习小组
  • 📝 通过写题解,巩固做题思路,养成良好的记录习惯
  • 💡 系统掌握常考算法和数据结构,了解互联网笔试难度
  • 🎁 坚持打卡,获得丰厚奖励,激励自己持之以恒

🥰 打卡奖励

打卡时长奖励内容
7天任选一家最新互联网笔试真题 x 1 (价值29.9r)
14天任选一家最新互联网笔试真题 x 3 + 笔试面试经验贴
21天任选一家最新互联网笔试真题 x 5 + 清隆三语言算法模版
28天最新互联网大厂笔试真题汇总(价值199r) + 华为OD机试训练营 (价值89r)

7天打卡即可值回票价,心动不如行动!=>笔试刷题陪伴小屋-打卡赢价值丰厚奖励 <=

🕰 每日学习安排

小屋将在每日上午发放打卡题目,包括:

  • 一道算法模版题,帮助大家掌握常用算法套路
  • 根据算法模版,精选一道对应的大厂笔试真题,巩固算法应用

让我们一起直击笔试重点,攻克常考题型!

📖 打卡小屋涉及题型

小屋从零基础出发,涵盖笔试常考知识点:

基础算法
  • 自定义排序
  • 二分
  • 前缀和
  • 差分
  • 双指针
基础数据结构
  • 栈 & 单调栈
  • 队列 & 单调队列
  • 并查集
  • 优先队列(堆)
搜索
  • DFS & BFS 基础应用
  • 树的遍历
  • 基础图论
动态规划 & 贪心 & 数论
  • 快速幂
  • 组合数
  • 质数 & 因数
  • 位运算
  • 基础动态规划
  • 常见贪心

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

武汉星起航:成功挂牌上股交,领航亚马逊跨境电商,共创未来辉煌

在全球电商的竞争格局中&#xff0c;亚马逊凭借其卓越的服务、丰富的商品种类和高效的物流体系&#xff0c;始终稳坐全球电商市场的头把交椅。而在这股不可阻挡的电商浪潮中&#xff0c;武汉星起航电子商务有限公司凭借其前瞻性的战略布局和强大的运营能力&#xff0c;成功在20…

【鸿蒙学习笔记】基础组件Blank:空白填充组件

Blank&#xff1a;空白填充组件 Column({ space: 20 }) {Row() {Text(Bluetooth)Blank().color(Color.Yellow)Toggle({ type: ToggleType.Switch }).margin({ top: 14, bottom: 14, left: 6, right: 6 })}.backgroundColor(Color.Pink).borderRadius(15).padding({ left: 12 }…

代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

518. 零钱兑换 II 题目链接&#xff1a;518. 零钱兑换 II 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会 思路&#xff1a; 和494.目标和类似&#xff0c;这题属于组合问题&#xff0c;当我们有一个硬币coin时&#xff0c;对于每个金额j&#xff0c;通过添加这个硬币&a…

Java--Map集合

Map 映射(map)是存储键和值间关联(即&#xff0c;键值对)的对象。给定一个键&#xff0c;可以找到其值。键和值都是对象。键必须唯一&#xff0c;但是值可以重复。 支持映射的接口 接 口 描 述 Map 将唯一键映射到值 NavigableMap 扩展SortedMap接口&#xff0c;以处理…

构筑政企创业实战技能新生态,赋能实战技能培训

国际数字影像产业园在创业实战技能培养方面具有显著的优势和资源。通过丰富的产业资源、专业的培训体系以及实战机会的提供&#xff0c;创业者可以全面提升自己的创业实战技能&#xff0c;为成功创业打下坚实的基础。 一、国际数字影像产业园在创业实战技能培养方面的优势 1、…

2.1 程序设计语言基础

程序设计语言概述 常见的编程语言 编译和解释 程序设计语言的基本成分 数据成分、运算成分、控制成分、传输成分 函数 传值调用、传址调用 编译程序基本原理

ros1仿真导航机器人 navigation

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1navigation导航框架 2导航设置过程 &#xff08;1&#xff09;启动仿真环境 roslaunch why_simulation why_robocup.launch &#xff08;2&#xff09;启动move_base导航、amcl定位 roslaunch why_simulation nav…

平凉擀面皮:西北风味的代表

平凉擀面皮是一道具有地方特色的传统美食&#xff0c;具有以下特点&#xff1a; 历史悠久&#xff1a;擀面皮自唐代冷淘面演变而来&#xff0c;历史悠久。选料精良&#xff1a;采用冬小麦精粉为原料&#xff0c;制作过程中不添加任何食品添加剂。口感独特&#xff1a;口感筋道…

筑算网基石 创数智未来|锐捷网络闪耀2024 MWC上海

2024年6月26日至28日&#xff0c;全球科技界瞩目的GSMA世界移动大会&#xff08;MWC 上海&#xff09;在上海新国际博览中心&#xff08;SNIEC&#xff09;盛大召开。作为行业领先的网络解决方案提供商&#xff0c;锐捷网络以“筑算网基石 创数智未来”为主题&#xff0c;带来了…

asp.net的承载环境的配置与应用

[S1513]基于环境变量的配置初始化 应用启动的时候会将当前的环境变量作为配置源来创建承载最初配置数据的IConfiguration对象&#xff0c;但它只会选择名称以“ASPNETCORE_”为前缀的环境变量&#xff08;通过静态类型Host的CreateDefaultBuilder方法创建的HostBuilder默认选择…

【笔记】记录一次全新的Java项目部署过程

记录一次全新的Java项目部署过程 环境&#xff1a;CentOS7 一、初始环境准备 yum install wget -y yum install vim -y yum install net-tools -y mkdir /data mkdir /data/html mkdir /data/backend一、安装JDK 17 安装JDK17 # 下载rpm wget https://download.oracle.com…

科普文:一文搞懂jvm(一)jvm概叙

概叙 因篇幅限制&#xff0c;这里将分为多篇文章来讲解。 为什么要学习jvm&#xff1f; 1.这是3年的java程序员必备技能。 2.理解“跨平台”、熟悉jvm组织结构、类的加载、双亲委派、对象在jvm中的生命周期、STD。 3.最终目的只有一个&#xff1a;用jdk提供的工具分析排查解决…

一篇带你了解ScheduledExecutorService的用法和适用场景

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、ScheduledExecutorService的作用二、ScheduledExecutorService的使用2.1 常用方法2.2 如何关闭释放资源 三、最后 开篇说明 …

SAPUI5基础知识10 - i18与国际化

1. 背景 i18n 是 “internationalization” 的缩写&#xff0c;其中的 18 是 “internationalization” 这个单词中间的字符数。i18n 是一种让应用程序支持多种语言的方法&#xff0c;也就是我们通常所说的国际化。 在SAPUI5中&#xff0c;i18n主要通过使用资源模型&#xff…

基于Java平价平价汽车租赁系统设计和实现(源码+LW+部署讲解)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

一、课程介绍,基础—环境安装、判断、循环语句等(爬虫及数据可视化)

一、课程介绍&#xff0c;基础—环境安装、判断、循环语句等&#xff08;爬虫及数据可视化&#xff09; 1. 课程介绍1.1 相关内容1.2 学习目标1.3 学习内容安排 2. python2.1 环境配置2.2 标识符和关键字2.3 运算符2.4 判断语句2.5 循环语句 1. 课程介绍 1.1 相关内容 10天的…

一文了解IP地址冲突的起因与解决方案

IP 地址冲突是困扰网络管理员影响网络的正常运行的常见因素。深入理解并有效解决 IP 地址冲突故障对于维护网络的高效稳定运行具有重要意义。 一、IP 地址冲突的原因 &#xff08;一&#xff09;人为配置错误 网络用户在手动配置 IP 地址时&#xff0c;对网络配置了解不多用户…

HarmonyOS开发探索:父子组件手势绑定问题处理

场景一&#xff1a;父子组件同时绑定手势的冲突处理 效果图 方案 在默认情况下&#xff0c;手势事件为非冒泡事件&#xff0c;当父子组件绑定相同的手势时&#xff0c;父子组件绑定的手势事件会发生竞争&#xff0c;最多只有一个组件的手势事件能够获得响应&#xff0c;默认子…

数据结构笔记第3篇:双向链表

1、双向链表的结构 注意&#xff1a;这里的 "带头" 跟前面我们说的 "头结点" 是两个概念&#xff0c;实际前面的在单链表阶段称呼不严谨&#xff0c;但是为了同学们更好的理解就直接称为单链表的头结点。 带头链表里的头结点&#xff0c;实际为 "哨兵…

# 职场生活之道:善于团结

在职场这个大舞台上&#xff0c;每个人都是演员&#xff0c;也是观众。要想在这个舞台上站稳脚跟&#xff0c;除了专业技能&#xff0c;更要学会如何与人相处&#xff0c;如何团结他人。团结&#xff0c;是职场生存的重要法则之一。 1. 主动团结&#xff1a;多一个朋友&#x…