中国电信笔试 中国电信秋招 中国电信笔试题 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等多种语言做法集合指南