【秋招笔试】2025.08.28阿里云算法岗秋招笔试改编题
✅ 秋招备战指南 ✅
💡 学习建议:
- 先尝试独立解题
- 对照解析查漏补缺
🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力
🌸 目前本专栏已经上线160+套真题改编解析,后续会持续更新的
春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗
阿里云
题目一:魔法药剂配方调制
1️⃣:从两个约束条件建立二元方程组
2️⃣:通过代入消元法得到二次方程
3️⃣:使用求根公式推导出统一解
难度:简单
这道题目考查的是基础的代数运算和方程求解能力。关键在于理解两个数学约束条件之间的关系,通过代入消元法将问题转化为一元二次方程。最终发现对于任意非零整数 ,都存在唯一的整数解,使得问题变得相当直接。
题目二:深度学习模型训练优化器
1️⃣:理解四阶段学习率调度的数学公式
2️⃣:使用 NumPy 进行向量化计算提高效率
3️⃣:正确处理 JSON 输入输出和精度控制
难度:简单
这道题目主要考查对分段函数的理解和 NumPy 库的熟练使用。虽然涉及深度学习概念,但本质上是数学公式的程序实现。关键技巧是使用掩码技术同时处理多个数据点,避免低效的循环操作。
题目三:古代密码宝箱解锁
1️⃣:分析最大公约数和的最小值构造方法
2️⃣:利用贝特朗定理寻找合适的目标素数
3️⃣:通过调整特定位置实现精确的和值控制
难度:中等
这道题目结合了数论、素数判断和构造算法。核心洞察是先构造一个基准方案使所有 都为1,然后通过调整一个位置来达到最小素数目标。需要理解
的性质以及如何通过巧妙的数值设置来控制最大公约数的值。
01. 魔法药剂配方调制
问题描述
小柯是一位炼金术师,她正在研究古老的魔法药剂配方。根据古籍记载,某种强力药剂需要三种珍贵材料:火焰精华、冰霜之心和雷电宝石。
炼金术的核心在于材料间的神秘比例关系。设三种材料的用量分别为 、
、
个单位,它们必须满足以下两个炼金法则:
-
能量平衡法则:
-
质量守恒法则:
小柯已经确定了 的用量,现在需要计算出对应的
和
的用量。由于材料的珍贵性,所有用量都必须是非零整数,且三种材料的用量必须互不相等。
输入格式
第一行包含一个正整数 ,表示需要配制的药剂种类数。
接下来 行,每行包含一个非零整数
,表示冰霜之心的用量。
输出格式
对于每种药剂,输出一行结果:
如果存在满足条件的材料用量 和
,输出两个整数
和
(需满足
);
如果不存在这样的配方,输出 。
样例输入
1
1
样例输出
-2 4
样例 | 解释说明 |
---|---|
样例1 | 当 |
数据范围
且
题解
这道题目本质上是解一个二元方程组,关键在于从两个约束条件中推导出 和
的表达式。
分析过程:
从质量守恒法则可以得到:
将这个关系代入能量平衡法则:
通过通分和整理,可以得到:
交叉相乘后化简:
展开并整理得到二次方程:
求解公式:
使用二次方程求根公式:
分情况讨论:
- 当
时,取负号得
- 当
时,取正号得
因此统一公式为:,
验证解的有效性:
- 非零性:由于
,所以
,
- 互不相等:
,
,
显然两两不等
- 范围限制:当
时,
,
,都在允许范围内
时间复杂度: 每组数据 空间复杂度:
参考代码
Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve():
t = int(input())
for _ in range(t):
b = int(input())
# 根据推导的公式直接计算
a = -2 * b
c = 4 * b
print(a, c)
if __name__ == "__main__":
solve()
Cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
long long b;
cin >> b;
// 使用推导的公式计算结果
long long a = -2LL * b;
long long c = 4LL * b;
cout << a << " " << c << "\n";
}
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
long b = sc.nextLong();
// 应用数学推导得到的公式
long fireEssence = -2L * b; // 火焰精华用量
long thunder = 4L * b; // 雷电宝石用量
System.out.println(fireEssence + " " + thunder);
}
sc.close();
}
}
02. 深度学习模型训练优化器
问题描述
小毛正在开发一个新型的深度学习训练系统,需要实现一种称为 QWCC(Quadratic-Warm/Cubic-Cool)的学习率调度算法。这种算法采用四阶段的学习率调整策略,能够在训练初期平稳启动,在训练后期精细调节,从而获得更好的模型收敛效果。
QWCC 算法将整个训练过程分为四个阶段:
-
二次预热阶段:学习率从
开始以二次函数形式增长到最大值
-
恒定保持阶段:学习率保持在最大值不变
-
三次冷却阶段:学习率以三次函数形式从最大值降低到最小值
-
最终保持阶段:学习率保持在最小值不变
给定训练的超参数配置,需要计算指定训练步数的学习率值。
输入格式
输入为一行 JSON 格式字符串,包含以下参数:
eta_max
:最大学习率eta_min
:最小学习率W
:预热阶段步数H
:恒定保持阶段步数C
:冷却阶段步数T
:总训练步数(满足)
query
:(可选)需要查询的训练步数列表
输出格式
输出一行 JSON 格式字符串,包含:
lr
:学习率数组,如果提供了query
参数,则只输出对应步数的学习率;否则输出所有训练步的学习率
学习率计算公式:
对于第 步(从
开始):
样例输入
{ "eta_max":0.1, "eta_min":0.001, "W":3, "H":2, "C":5, "T":12, "query":[1,3,5,10]}
样例输出
{ "lr": [0.011111, 0.1, 0.1, 0.001]}
样例 | 解释说明 |
---|---|
样例1 | 查询步数[1,3,5,10]对应的学习率:步数1在预热阶段,步数3在预热阶段末尾,步数5在恒定阶段,步数10在最终保持阶段 |
数据范围
- 查询步数均为有效范围内的正整数
题解
这道题目要求实现一个分段函数来计算不同训练阶段的学习率。关键在于理解四个阶段的数学公式,并正确处理边界条件。
算法思路:
- 阶段划分:根据步数
判断当前处于哪个训练阶段
- 公式应用:为每个阶段应用对应的数学公式
- 向量化计算:使用 NumPy 进行高效的向量化运算
- 精度控制:确保输出结果保留6位小数
实现要点:
- 使用掩码(mask)技术同时处理多个步数
- 合理利用 NumPy 的广播机制避免循环
- 正确处理边界情况和步数转换(1-based 转 0-based)
时间复杂度: 或
空间复杂度:
或
这种向量化实现方式不仅代码简洁,而且能够充分利用 NumPy 的优化,在处理大量数据时表现出色。
参考代码
Python
import sys
import json
import numpy as np
def solve():
# 读取JSON输入
input_data = json.loads(sys.stdin.read().strip())
# 提取参数
eta_max = input_data["eta_max"]
eta_min = input_data["eta_min"]
w = input_data["W"]
h = input_data["H"]
c = input_data["C"]
t_total = input_data["T"]
query_steps = input_data.get("query", None)
# 确定需要计算的步数
if query_steps is None:
steps = np.arange(1, t_total + 1)
else:
steps = np.array(query_steps)
# 初始化学习率数组
lr_vals = np.zeros_like(steps, dtype=float)
# 阶段1:二次预热 (1 <= t <= W)
phase1_mask = steps <= w
if np.any(phase1_mask):
t_phase1 = steps[phase1_mask]
lr_vals[phase1_mask] = eta_max * (t_phase1 / w) ** 2
# 阶段2:恒定保持 (W < t <= W+H)
phase2_mask = (steps > w) &
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力