中国电信笔试 中国电信秋招 中国电信笔试题 0927

笔试时间:2025年9月27日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:bpqd

字符 'b'、'p'、'q'、'd' 很有趣,它们旋转和翻转后可以完全相同!我们称它们为「b系」字符。

现在给出一个长度为 3 的字符串,统计其中的「b系」字符的个数。

输入描述

输入一个长度为 3、仅由小写字母构成的字符串 s。

输出描述

输出一个整数,表示字符串 s 中「b系」字符的个数。

样例输入

bpq

样例输出

3

参考题解

解题思路:

  1. 明确「b系」字符的范围:题目已说明是 'b', 'p', 'q', 'd' 这四个字符
  2. 遍历字符串的每个字符,判断它是否属于这四个字符之一
  3. 若属于,则计数加一;否则跳过
  4. 最终输出计数值

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. 三个字母对应整数范围是 [1, 26]
  2. 需要找到满足条件的三元组 (w₁, w₂, w₃):w₁ + w₂ + w₃ = n 且 |w₁ - w₂| ∈ D 且 |w₂ - w₃| ∈ D
  3. 输出字典序最小的合法字符串 → 因为字典序优先考虑 w₁,再考虑 w₂,最后 w₃,所以直接三重循环从小到大枚举即可
  4. 一旦找到第一个满足条件的就可以直接输出
  5. 如果没有找到,则输出 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等多种语言做法集合指南

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

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