中国电信笔试 中国电信秋招 中国电信笔试题 0927
笔试时间:2025年9月27日
往年笔试合集:
第一题:bpqd
字符 'b'、'p'、'q'、'd' 很有趣,它们旋转和翻转后可以完全相同!我们称它们为「b系」字符。
现在给出一个长度为 3 的字符串,统计其中的「b系」字符的个数。
输入描述
输入一个长度为 3、仅由小写字母构成的字符串 s。
输出描述
输出一个整数,表示字符串 s 中「b系」字符的个数。
样例输入
bpq
样例输出
3
参考题解
解题思路:
- 明确「b系」字符的范围:题目已说明是 'b', 'p', 'q', 'd' 这四个字符
- 遍历字符串的每个字符,判断它是否属于这四个字符之一
- 若属于,则计数加一;否则跳过
- 最终输出计数值
C++:
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
string s;
cin >> s;
int count = 0;
set<char> b_series_chars = {'b', 'p', 'q', 'd'};
for (char ch : s) {
if (b_series_chars.count(ch)) {
count++;
}
}
cout << count << endl;
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int count = 0;
Set<Character> bSeriesChars = new HashSet<>(Arrays.asList('b', 'p', 'q', 'd'));
for (char ch : s.toCharArray()) {
if (bSeriesChars.contains(ch)) {
count++;
}
}
System.out.println(count);
}
}
Python:
s = input()
count = 0
b_series_chars = {'b', 'p', 'q', 'd'}
for char in s:
if char in b_series_chars:
count += 1
print(count)
第二题:字符串min-29
有一串仅由 3 个小写字母组成的单词。将字母按字母表位置编号为 1~26(a = 1, b = 2, ..., z = 26)。定义单词 w₁w₂w₃ 的"编码和"为:[w₁ + w₂ + w₃]
现在给定一个整数 n 与一个允许的邻差集合 D = {d₁, d₂, ..., dₖ}
当且仅当同时满足以下条件:
- [w₁ + w₂ + w₃ = n]
- [|w₁ - w₂| ∈ D 且 |w₂ - w₃| ∈ D]
我们称 w₁w₂w₃ 为"合法"的三字母单词。请在所有合法单词中,输出字典序最小的那个;若不存在合法单词,输出 NO。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 t (1 ≤ t ≤ 10⁴),代表数据组数。每组测试数据:
- 第一行输入两个整数 n, k(3 ≤ n ≤ 78; 1 ≤ k ≤ 25)
- 第二行输入 k 个两两不同的整数 d₁, d₂, ..., dₖ(1 ≤ dᵢ ≤ 25),表示集合 D
输出描述
对于每一组测试数据,新起一行输出:
- 若存在合法单词,输出由 3 个小写字母组成的字符串(例如 "abc")
- 否则输出 NO
样例输入
2
6 1
1
4 1
2
样例输出
abc
NO
参考题解
解题思路:
- 三个字母对应整数范围是 [1, 26]
- 需要找到满足条件的三元组 (w₁, w₂, w₃):w₁ + w₂ + w₃ = n 且 |w₁ - w₂| ∈ D 且 |w₂ - w₃| ∈ D
- 输出字典序最小的合法字符串 → 因为字典序优先考虑 w₁,再考虑 w₂,最后 w₃,所以直接三重循环从小到大枚举即可
- 一旦找到第一个满足条件的就可以直接输出
- 如果没有找到,则输出 NO
C++:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
set<int> D;
for (int i = 0; i < k; i++) {
int d;
cin >> d;
D.insert(d);
}
bool found = false;
string ans = "NO";
for (int w1 = 1; w1 <= 26 && !found; w1++) {
for (int w2 = 1; w2 <= 26 && !found; w2++) {
if (D.find(abs(w1 - w2)) == D.end()) {
continue;
}
int w3 = n - w1 - w2;
if (w3 >= 1 && w3 <= 26 && D.find(abs(w2 - w3)) != D.end()) {
ans = "";
ans += char(w1 + 96);
ans += char(w2 + 96);
ans += char(w3 + 96);
found = true;
}
}
}
cout << ans << endl;
}
return 0;
}
Java:
import java.util.*;
public class Main {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南