阿里云笔试 阿里云笔试题 0828
笔试时间:2025年8月28日
往年笔试合集:
第一题
给定一个非零整数 b,请你找到另外两个非零整数 a 和 c,使得满足以下条件:
a, b, c 互不相等;
-10¹² ≤ a, c ≤ 10¹²;
1/a + 1/b = 2/c 成立;
a + c = 2×b 成立。
如果答案存在,直接输出任意一对满足条件的 a 和 c;否则,输出 -1。
输入描述
每个测试文件均包含多组测试数据。
第一行输入一个整数 T(1≤T≤10⁵)代表数据组数。
接下来 T 行,每行输入一个整数 b(-10⁹≤b≤10⁹ 且 b≠0),表示给定的非零整数。
输出描述
对于每一组测试数据,新起一行输出结果。
如果存在满足条件的 a 和 c,输出两个非零整数 a 和 c(满足 -10¹²≤a, c≤10¹²);否则,输出 -1。
如果存在多个解决方案,输出任意一个即可。
样例输入
1
1
样例输出
-2 4
参考题解
C++:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
long long b;
cin >> b;
long long a = -2 * b;
long long c = 4 * b;
// 检查条件:a, b, c互不相等且绝对值都在10^12范围内
if (a != b && a != c && b != c &&
abs(a) <= 1000000000000LL &&
abs(c) <= 1000000000000LL) {
cout << a << " " << c << endl;
} else {
cout << "-1" << endl;
}
}
return 0;
}
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class FindAC {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine().trim());
for (int i = 0; i < t; i++) {
long b = Long.parseLong(br.readLine().trim());
long a = -2 * b;
long c = 4 * b;
// 检查条件:a, b, c互不相等且绝对值都在10^12范围内
if (a != b && a != c && b != c &&
Math.abs(a) <= 1000000000000L &&
Math.abs(c) <= 1000000000000L) {
System.out.println(a + " " + c);
} else {
System.out.println("-1");
}
}
}
}
Python:
t = int(input().strip())
for _ in range(t):
b = int(input().strip())
# 根据数学推导:a = -2*b, c = 4*b
a = -2 * b
c = 4 * b
# 检查条件:a, b, c 互不相等且都在范围内
if a != b and a != c and b != c and abs(a) <= 10**12 and abs(c) <= 10**12:
print(f"{a} {c}")
else:
print("-1")
第二题
题目要求:请实现一个Quadratic-Warm/Cubic-Cool(QWCC)学习率调度器。
算法描述:与常见linear warm-up+cosine decay不同,QWCC分四段并采用二次上升+三次下降。
给定超参数:
最大学习率 η_max
最小学习率 η_min
Warm-up步数
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

