【秋招笔试】2025.08.28阿里云算法岗秋招笔试改编题

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

阿里云

题目一:魔法药剂配方调制

1️⃣:从两个约束条件建立二元方程组

2️⃣:通过代入消元法得到二次方程

3️⃣:使用求根公式推导出统一解

难度:简单

这道题目考查的是基础的代数运算和方程求解能力。关键在于理解两个数学约束条件之间的关系,通过代入消元法将问题转化为一元二次方程。最终发现对于任意非零整数 ,都存在唯一的整数解,使得问题变得相当直接。

题目二:深度学习模型训练优化器

1️⃣:理解四阶段学习率调度的数学公式

2️⃣:使用 NumPy 进行向量化计算提高效率

3️⃣:正确处理 JSON 输入输出和精度控制

难度:简单

这道题目主要考查对分段函数的理解和 NumPy 库的熟练使用。虽然涉及深度学习概念,但本质上是数学公式的程序实现。关键技巧是使用掩码技术同时处理多个数据点,避免低效的循环操作。

题目三:古代密码宝箱解锁

1️⃣:分析最大公约数和的最小值构造方法

2️⃣:利用贝特朗定理寻找合适的目标素数

3️⃣:通过调整特定位置实现精确的和值控制

难度:中等

这道题目结合了数论、素数判断和构造算法。核心洞察是先构造一个基准方案使所有 都为1,然后通过调整一个位置来达到最小素数目标。需要理解 的性质以及如何通过巧妙的数值设置来控制最大公约数的值。

01. 魔法药剂配方调制

问题描述

小柯是一位炼金术师,她正在研究古老的魔法药剂配方。根据古籍记载,某种强力药剂需要三种珍贵材料:火焰精华、冰霜之心和雷电宝石。

炼金术的核心在于材料间的神秘比例关系。设三种材料的用量分别为 个单位,它们必须满足以下两个炼金法则:

  • 能量平衡法则

  • 质量守恒法则

小柯已经确定了 的用量,现在需要计算出对应的 的用量。由于材料的珍贵性,所有用量都必须是非零整数,且三种材料的用量必须互不相等。

输入格式

第一行包含一个正整数 ,表示需要配制的药剂种类数。

接下来 行,每行包含一个非零整数 ,表示冰霜之心的用量。

输出格式

对于每种药剂,输出一行结果:

如果存在满足条件的材料用量 ,输出两个整数 (需满足 );

如果不存在这样的配方,输出

样例输入

1
1

样例输出

-2 4
样例 解释说明
样例1 时,取 。验证:,且

数据范围

题解

这道题目本质上是解一个二元方程组,关键在于从两个约束条件中推导出 的表达式。

分析过程:

从质量守恒法则可以得到:

将这个关系代入能量平衡法则:

通过通分和整理,可以得到:

交叉相乘后化简:

展开并整理得到二次方程:

求解公式:

使用二次方程求根公式:

分情况讨论:

  • 时,取负号得
  • 时,取正号得

因此统一公式为:

验证解的有效性:

  1. 非零性:由于 ,所以
  2. 互不相等: 显然两两不等
  3. 范围限制:当 时,,都在允许范围内

时间复杂度: 每组数据 空间复杂度:

参考代码

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在最终保持阶段

数据范围

  • 查询步数均为有效范围内的正整数

题解

这道题目要求实现一个分段函数来计算不同训练阶段的学习率。关键在于理解四个阶段的数学公式,并正确处理边界条件。

算法思路:

  1. 阶段划分:根据步数 判断当前处于哪个训练阶段
  2. 公式应用:为每个阶段应用对应的数学公式
  3. 向量化计算:使用 NumPy 进行高效的向量化运算
  4. 精度控制:确保输出结果保留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%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

09-07 15:00
门头沟学院 Java
点赞 评论 收藏
分享
09-07 15:20
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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