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

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

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

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

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

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

文章目录

    • 📖 写在前面
      • 夏天要来了 秋招还会远吗?
    • 🎀 01.卢小姐的完美日程安排
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🌸 02.K小姐的探险之旅
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • ✈️ 03.K小姐的书架整理
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎀 写在最后
    • 🛖 这里介绍一下咱们的笔试打卡小屋
      • 🥰 打卡奖励
      • 🕰 每日学习安排
      • 📖 打卡小屋涉及题型
        • 基础算法
        • 基础数据结构
        • 搜索
        • 动态规划 & 贪心 & 数论

📖 写在前面

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

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

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

在这里插入图片描述

🎀 01.卢小姐的完美日程安排

问题描述

卢小姐是一位非常注重效率的人,她总是希望把一天的时间安排得满满当当。对于她来说,一个完美的日程安排需要满足以下条件:

  1. 将一天分为 n n n 个时间段,每个时间段用 1 1 1 n n n 的正整数表示,且不重复。
  2. 对于任意时间段 i i i,若安排在时间段 i i i 进行的活动编号为 a i a_i ai,则安排在时间段 a i a_i ai 进行的活动编号必须为 n − a i + 1 n - a_i + 1 nai+1

现在卢小姐想要知道,在满足以上条件的情况下,字典序最大的日程安排是什么样的?

注:字典序指按照正整数大小比较两个序列的方法。对于两个长度相同的序列 A A A B B B,若存在一个位置 i i i,使得对于任意 j < i j < i j<i,都有 A j = B j A_j = B_j Aj=Bj,而 A i > B i A_i > B_i Ai>Bi,则认为序列 A A A 的字典序大于序列 B B B

输入格式

输入仅一行,包含一个正整数 n n n,表示一天被分为 n n n 个时间段。

输出格式

输出一行,包含 n n n 个正整数,用空格隔开,表示字典序最大的完美日程安排中每个时间段对应的活动编号。

样例输入

3

样例输出

3 2 1

数据范围

  • 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105

题解

根据题目描述,对于任意时间段 i i i,若安排在时间段 i i i 进行的活动编号为 a i a_i ai,则安排在时间段 a i a_i ai 进行的活动编号必须为 n − a i + 1 n - a_i + 1 nai+1。因此,我们可以得到以下结论:

  1. a i = n + 1 2 a_i = \frac{n+1}{2} ai=2n+1,则 a i = n − a i + 1 a_i = n - a_i + 1 ai=nai+1,即时间段 n + 1 2 \frac{n+1}{2} 2n+1 的活动编号必须为 n + 1 2 \frac{n+1}{2} 2n+1
  2. 对于其他时间段,若 a i < n + 1 2 a_i < \frac{n+1}{2} ai<2n+1,则 a n − a i + 1 = a i a_{n-a_i+1} = a_i anai+1=ai;若 a i > n + 1 2 a_i > \frac{n+1}{2} ai>2n+1,则 a n − a i + 1 = n − a i + 1 a_{n-a_i+1} = n - a_i + 1 anai+1=nai+1

因此,我们可以先确定中间时间段的活动编号,然后从大到小依次确定其他时间段的活动编号,即可得到字典序最大的完美日程安排。

具体步骤如下:

  1. 如果 n n n 为奇数,则将 n + 1 2 \frac{n+1}{2} 2n+1 安排在时间段 n + 1 2 \frac{n+1}{2} 2n+1
  2. n n n 开始,依次确定每个时间段的活动编号:
    • 如果当前时间段 i i i 已经确定,则跳过;
    • 否则,将当前时间段 i i i 的活动编号设为 i i i,并将时间段 n − i + 1 n - i + 1 ni+1 的活动编号设为 n − i + 1 n - i + 1 ni+1

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

参考代码

  • Python
n = int(input())
ans = [0] * (n + 1)for i in range(n, 0, -1):if ans[i] == 0:ans[i] = ians[n - i + 1] = n - i + 1print(*ans[1:][::-1])
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] ans = new int[n + 1];for (int i = n; i >= 1; i--) {if (ans[i] == 0) {ans[i] = i;ans[n - i + 1] = n - i + 1;}}for (int i = n; i >= 1; i --) {System.out.print(ans[i] + " ");}}
}
  • Cpp
#include <iostream>
using namespace std;int main() {int n;cin >> n;int ans[n + 1];for (int i = 1; i <= n; i++) {ans[i] = 0;}for (int i = n; i >= 1; i--) {if (ans[i] == 0) {ans[i] = i;ans[n - i + 1] = n - i + 1;}}for (int i = n; i >= 1; i --) {cout << ans[i] << " ";}return 0;
}

🌸 02.K小姐的探险之旅

问题描述

K小姐正在玩一个探险游戏。游戏中有 n n n 个关卡,每个关卡都有一个字符表示的难度等级。K小姐有初始体力值 k k k,每通过一个关卡会消耗一定的体力。

游戏规则如下:

  1. K小姐必须按照关卡顺序挑战,即从第 1 1 1 个关卡开始,到第 n n n 个关卡结束。
  2. i i i 个关卡的难度等级用字符 s i s_i si 表示,其中 s i s_i si 为小写字母。
  3. 如果 s i s_i si s i − 1 s_{i-1} si1 相同,则通过第 i i i 个关卡不消耗体力。
  4. 如果 s i s_i si s i − 1 s_{i-1} si1 不同,设 s i s_i si s i − 1 s_{i-1} si1 的 ASCII 码之差为 Δ \Delta Δ,则:
    • Δ > 0 \Delta > 0 Δ>0,则通过第 i i i 个关卡会消耗 Δ \Delta Δ 点体力;
    • Δ < 0 \Delta < 0 Δ<0,则通过第 i i i 个关卡会增加 ∣ Δ ∣ |\Delta| ∣Δ∣ 点体力。
  5. 当体力值不大于 0 0 0 时,游戏结束。

请你计算K小姐完成游戏后的剩余体力值,如果无法完成游戏,则输出 − 1 -1 1

输入格式

第一行包含两个正整数 n n n k k k,表示关卡数和初始体力值。

第二行包含一个长度为 n n n 的字符串 s s s,表示每个关卡的难度等级。

输出格式

输出一个整数,表示K小姐完成游戏后的剩余体力值。如果无法完成游戏,则输出 − 1 -1 1

样例输入

5 10
abcde

样例输出

6

数据范围

  • 1 ≤ n , k ≤ 1 0 5 1 \leq n, k \leq 10^5 1n,k105
  • 字符串 s s s 仅包含小写字母

题解

本题可以通过模拟游戏过程来解决。我们可以依次处理每个关卡,根据当前关卡和前一个关卡的难度等级之差来计算体力值的变化。

具体步骤如下:

  1. 初始化剩余体力值为 k k k
  2. 从第 2 2 2 个关卡开始,计算当前关卡和前一个关卡的难度等级之差 Δ \Delta Δ
  3. 如果 Δ > 0 \Delta > 0 Δ>0,则剩余体力值减去 Δ \Delta Δ;如果 Δ < 0 \Delta < 0 Δ<0,则剩余体力值加上 ∣ Δ ∣ |\Delta| ∣Δ∣
  4. 如果剩余体力值不大于 0 0 0,则游戏失败,输出 − 1 -1 1 并结束程序。
  5. 处理完所有关卡后,输出最终的剩余体力值。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)。其中 n n n 为关卡数。

参考代码

  • Python
n, k = map(int, input().split())
s = input()for i in range(1, n):delta = ord(s[i]) - ord(s[i-1])k -= deltaif k <= 0:print(-1)exit()print(k)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();String s = sc.next();for (int i = 1; i < n; i++) {int delta = s.charAt(i) - s.charAt(i-1);k -= delta;if (k <= 0) {System.out.println(-1);return;}}System.out.println(k);}
}
  • Cpp
#include <iostream>
using namespace std;int main() {int n, k;cin >> n >> k;string s;cin >> s;for (int i = 1; i < n; i++) {int delta = s[i] - s[i-1];k -= delta;if (k <= 0) {cout << -1 << endl;return 0;}}cout << k << endl;return 0;
}

✈️ 03.K小姐的书架整理

问题描述

K小姐有两个书架,每个书架上都摆放着 n n n 本书。这些书是按照一定的顺序排列的,可以看作是两个长度为 n n n 的排列。

K小姐打算将这两个书架上的书合并起来,并且按照字典序从小到大的顺序重新摆放。不过,为了方便查找,她希望只保留其中不重复的书的排列。

现在,K小姐想知道,最终她的书架上会有多少种不同的书的排列方式呢?

注:排列是指由 1 1 1 n n n 组成的长度为 n n n 的序列,且每个数字仅出现一次。

输入格式

第一行包含一个正整数 n n n,表示每个书架上书的数量。

第二行包含 n n n 个正整数 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an,表示第一个书架上书的排列顺序。

第三行包含 n n n 个正整数 b 1 , b 2 , … , b n b_1, b_2, \dots, b_n b1,b2,,bn,表示第二个书架上书的排列顺序。

输出格式

输出一个整数,表示最终K小姐书架上不同的书的排列方式的数量。

样例输入

3
1 2 3
3 2 1

样例输出

9

数据范围

1 ≤ n ≤ 2 × 1 0 5 1 \leq n \leq 2 \times 10^5 1n2×105

1 ≤ a i , b i ≤ n 1 \leq a_i, b_i \leq n 1ai,bin

a i a_i ai b i b_i bi 均为 1 1 1 n n n 的排列

题解

本题可以通过枚举子排列来解决。我们可以分别枚举两个书架上的书的子排列,然后统计它们的总数。

f ( x ) f(x) f(x) 表示长度为 x x x 的排列的子排列数量,那么有:

f ( x ) = x ( x + 1 ) 2 f(x) = \frac{x(x+1)}{2} f(x)=2x(x+1)

对于两个书架上的书,我们可以先分别计算它们的子排列总数,即 f ( n ) + f ( n ) f(n) + f(n) f(n)+f(n)

然后,我们需要减去两个书架上相同的子排列数量。具体来说,对于第二个书架上的每一本书 b i b_i bi,我们找到它在第一个书架上的位置 j j j,然后检查从 b i b_i bi 开始,两个书架上连续的书是否相同。如果有连续的 k k k 本书相同,那么我们就要减去 f ( k ) f(k) f(k),因为这部分子排列被重复计算了。

综上,答案为:

f ( n ) + f ( n ) − ∑ i = 1 n f ( k i ) f(n) + f(n) - \sum_{i=1}^{n} f(k_i) f(n)+f(n)i=1nf(ki)

其中 k i k_i ki 表示从第二个书架的第 i i i 本书开始,两个书架上连续相同的书的数量。

参考代码

  • Python
def get_subseq_count(x):return x * (x + 1) // 2n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))pos_a = [0] * (n + 1)
for i in range(n):pos_a[a[i]] = ians = get_subseq_count(n) * 2i = 0
while i < n:j = pos_a[b[i]]cnt = 0while i < n and j < n and a[j] == b[i]:i += 1j += 1cnt += 1ans -= get_subseq_count(cnt)print(ans)
  • Java
import java.io.*;
import java.util.*;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());int[] a = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();int[] b = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();int[] posA = new int[n + 1];for (int i = 0; i < n; i++) {posA[a[i]] = i;}long ans = getSubseqCount(n) * 2;for (int i = 0, j; i < n; ) {j = posA[b[i]];int cnt = 0;while (i < n && j < n && a[j] == b[i]) {i++;j++;cnt++;}ans -= getSubseqCount(cnt);}System.out.println(ans);}private static long getSubseqCount(int x) {return (long) x * (x + 1) / 2;}
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;typedef long long LL;LL get_subseq_count(int x) {return (LL)x * (x + 1) / 2;
}int main() {int n;cin >> n;vector<int> a(n), b(n);for (int i = 0; i < n; i++) {cin >> a[i];}for (int i = 0; i < n; i++) {cin >> b[i];}vector<int> pos_a(n + 1);for (int i = 0; i < n; i++) {pos_a[a[i]] = i;}LL ans = get_subseq_count(n) * 2;for (int i = 0, j; i < n; ) {j = pos_a[b[i]];int cnt = 0;while (i < n && j < n && a[j] == b[i]) {i++;j++;cnt++;}ans -= get_subseq_count(cnt);}cout << ans << endl;return 0;
}

🎀 写在最后

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

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

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

🥰 打卡奖励

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

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

🕰 每日学习安排

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

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

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

📖 打卡小屋涉及题型

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDM系统中物料分类与编码规则生成方案

在企业管理软件中&#xff0c;PDM系统是企业管理的前端软件&#xff0c;用于管理研发图纸、BOM等数据&#xff0c;然后生成相关物料表或BOM&#xff0c;递交给后端ERP系统进行生产管理。在PDM系统中&#xff0c;有两种方式可以生成物料编码。 1第一种是用户可以通过软件接口将…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天&#xff0c;随处的WIFI给与了大众极大的方便&#xff0c;也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…

Android EditText的属性与用法

EditText 是编辑框控件&#xff0c;可以接收用户输入&#xff0c;并在程序中对用户输入进行处理。EditText在App里随处可见&#xff0c;在进行搜索、聊天、拨号等需要输入信息的场合&#xff0c;都可以使用 EditText。 图1 编辑框示意图 EditText 是TextView的子类&#xff0c…

华为云盘古大模型5.0将如何促进工业领域的发展?

6月21日&#xff0c;在华为开发者大会2024&#xff08;HDC2024&#xff09;主题演讲环节中&#xff0c;华为常务董事、华为云CEO张平安重磅发布盘古大模型5.0&#xff0c;这一重要技术成果标志着人工智能在工业领域的应用迈出了新的步伐。当前&#xff0c;工业领域正面临着数字…

【ESP32】打造全网最强esp-idf基础教程——15.WiFi连接STA模式

WiFi连接STA模式 一、ESP32的WiFi功能介绍 前面章节内容&#xff0c;基本上都是描述了ESP32强大的MCU能力&#xff0c;这些MCU能力使得ESP32可以替换许多类型的单片机工作&#xff0c;而自己承担这部分功能&#xff1b;当然ESP32的IOT能力才是它的主业&#xff0c;从硬件配置来…

关于软件本地化,您应该了解什么?

软件本地化是调整软件应用程序以满足目标市场的语言、文化和技术要求的过程。它不仅仅涉及翻译用户界面&#xff1b;它包含一系列活动&#xff0c;以确保软件在目标语言环境中可用且相关。以下是您应该了解的有关软件本地化的一些关键方面&#xff1a; 了解范围 软件本地化是…

阳光倒灌试验太阳辐射系统日光模拟器

太阳光模拟器概述 太阳光模拟器是一种能在实验室环境下模拟太阳光照射特性的设备&#xff0c;广泛应用于材料科学、能源研究、环境科学等领域。通过模拟太阳光的光谱分布和辐射强度&#xff0c;太阳光模拟器可以为科研和工业提供稳定且可重复的光照条件&#xff0c;进而对材料…

人工智能|深度学习——多模态条件机制 Cross Attention 原理及实现

一、引入 虽然之前写过 Attention 的文章&#xff0c;但现在回头看之前写的一些文章&#xff0c;感觉都好啰嗦&#xff0c;正好下一篇要写的 Stable Diffusion 中有 cross-attention&#xff0c;索性就再单拎出来简单说一下 Attention 吧&#xff0c;那么这篇文章的作用有两个&…

46. 全排列

计算数组的全排列 给定一个不含重复数字的数组 nums&#xff0c;返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&a…

护网蓝队面试

一、sql注入分类 **原理&#xff1a;**没有对用户输入项进行验证和处理直接拼接到查询语句中 查询语句中插⼊恶意SQL代码传递后台sql服务器分析执行 **从注入参数类型分&#xff1a;**数字型注入、字符型注入 **从注入效果分&#xff1a;**报错注入、布尔注入、延时注入、联…

day04-组织架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息&#xff0c;可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

02-部署LVS-DR群集

1.LVS-DR工作原理 LVS-DR模式&#xff0c;Director Server作为群集的访问入口&#xff0c;不作为网购使用&#xff0c;节点Director Server 与 Real Server 需要在同一个网络中&#xff0c;返回给客户端的数据不需要经过Director Server 为了响应对整个群集的访问&#xff0c;…

Docker镜像加速配置

由于当前运营商网络问题&#xff0c;可能会导致您拉取 Docker Hub 镜像变慢&#xff0c;索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 每个人镜像地址都不一样&#xff0c;需要登陆阿里云自行查看&#xff0c;地址在上面&a…

llama-factory训练RLHF-PPO模型

理论上RLHF&#xff08;强化学习&#xff09;效果比sft好&#xff0c;也更难训练。ppo有采用阶段,步骤比较多,训练速度很慢. 记录下工作中使用llama-factory调试rlhf-ppo算法流程及参数配置,希望对大家有所帮助. llama-factory版本: 0.8.2 一 rlhf流程 ppo训练流程图如下, 会…

油猴Safari浏览器插件:Tampermonkey for Mac 下载

Tampermonkey 是一个强大的浏览器扩展&#xff0c;用于运行用户脚本&#xff0c;这些脚本可以自定义和增强网页的功能。它允许用户在网页上执行各种自动化任务&#xff0c;比如自动填写表单、移除广告、改变页面布局等。适用浏览器&#xff1a; Tampermonkey 适用于多数主流浏览…

Golang | Leetcode Golang题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; func rangeBitwiseAnd(m int, n int) int {for m < n {n & (n - 1)}return n }

二叉树与堆相关的时间复杂度问题

目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向下调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向上调整建堆&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a;…

Web Based Quiz System v1.0 SQL 注入漏洞(CVE-2022-32991)

前言 CVE-2022-32991 是一个影响 Web Based Quiz System v1.0 的 SQL 注入漏洞。这个漏洞存在于 welcome.php 文件中的 eid 参数处。攻击者可以通过此漏洞在数据库中执行任意 SQL 语句&#xff0c;从而获取、修改或删除数据库中的数据。 具体细节如下&#xff1a; 攻击向量&…

无人机森林火灾解决方案

森林火灾解决方案 森林火灾特点 森林火灾发生突然、蔓延迅速、难以控制&#xff0c;应对难度系 数很高&#xff0c;扑救工作十分困难 救援面临的挑战 • 林区交通不便&#xff0c; 山高坡陡&#xff0c; 沟壑纵横&#xff0c;难以及时侦查、 定位、扑灭 • 火灾发生的区域…

基于opencv的斜光测距及python实现

1.前言 最近做了一个基于opencv的斜光测距的小项目&#xff0c;东西不多&#xff0c;但是很有意思&#xff0c;值得拿出来学一学。项目里面需要比较精确的定位功能&#xff0c;将前人matlab代码移植到python上&#xff0c;并且做了一些优化&#xff0c;简化逻辑(毕竟我是专业的…