阿里笔试 盒马笔试 盒马秋招 1018
笔试时间:2025年10月18日
往年笔试合集:
第一题
小红正在数偶数:0,2,4,6,8,10,12,……,并将这些数依次拼接成一个无穷长的字符串"0246810121416···"。现给定一个正整数n,请你确定该字符串的第n个字符是什么(下标从1开始)。
输入描述
在一行上输入一个整数n(1≤n≤10^9)。
输出描述
在一行上输出一个字符,表示该字符串的第n个字符。
样例输入
6
样例输出
1
在这个样例中,字符串前6个字符为"024681",因此第6个字符是"1"。
参考题解
解题思路:
- 偶数序列中的每个数字长度不同: 个位数偶数(0, 2, 4, 6, 8)长度为1两位数偶数(10, 12, 14, ...)长度为2三位数偶数(100, 102, ...)长度为3,依此类推
- 我们需要找到包含第n个字符的那个偶数: 从最小的偶数0开始,依次累加每个偶数的长度当累加长度 ≥ n时,说明第n个字符就在当前这个偶数中
C++:
#include <iostream>
#include <string>
using namespace std;
void solve() {
int n;
cin >> n;
string s = "";
int k = 0;
int total_len = 0;
while (total_len < n) {
string even_str = to_string(2 * k);
s += even_str;
total_len += even_str.length();
k++;
}
cout << s[n - 1] << endl;
}
int main() {
solve();
return 0;
}
Java:
import java.util.Scanner;
public class Main {
public static void solve() {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
StringBuilder s = new StringBuilder();
int k = 0;
int totalLen = 0;
while (totalLen < n) {
String evenStr = String.valueOf(2 * k);
s.append(evenStr);
totalLen += evenStr.length();
k++;
}
System.out.println(s.charAt(n - 1));
}
public static void main(String[] args) {
solve();
}
}
Python:
import sys
def solve():
n = int(sys.stdin.readline().strip())
parts = []
k = 0
total_len = 0
while total_len < n:
even_str = str(2 * k)
parts.append(even_str)
total_len += len(even_str)
k += 1
s = "".join(parts)
print(s[n - 1])
solve()
第二题
小红有一个仅包含n个字符'a'的字符串,你需要对这个字符串进行操作,每次操作需要将一个字母改为另一个与它不同的小写字母。小红想知道在进行恰好m次操作后,可能会有多少种不同的字符串?由于这个答案可能很大,因此需要将答案对10^9+7取模。
输入描述
两个正整数n和m(1≤n,m≤10^5)
输出描述
一个整数。
样例输入
3 1
样例输出
75
样例说明:必须修改一次,有3个位置可以修改,每个位置可以改成除了'a'以外的任意字符,共有25种方式。因此答案是3×25=75。
参考题解
解题思路:
- 问题转化:初始全是'a',每次操作必须改成其他字母(有25种选择)。最终字符串中,被修改过的位置可以是任意非'a'的字母(26个字母中除去'a',有25种选择),且
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南