【笔试刷题】电信-2025.10.11-改编真题

✅ 秋招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线180+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

电信-2025.10.11

题目一:图书馆藏书整理

1️⃣:使用哈希表统计每种编号出现的次数

2️⃣:对每种编号的计数除以 2 求和得到答案

难度:简单

这道题目的关键在于理解配对的概念。每 2 本相同编号的图书可以组成一组,因此对于出现 次的编号,可以组成 组。使用哈希表统计每种编号的出现次数,然后对所有计数除以 2 求和即可。

题目二:特殊日期筛选

1️⃣:对每个数字判断是否在 [10, 99] 区间内

2️⃣:判断该数字是否为偶数(能被 2 整除)

3️⃣:统计同时满足两个条件的数字个数

难度:简单

这道题目是简单的条件判断问题。幸运日期需要同时满足"是两位数"和"是偶数"两个条件。对三个输入的数字分别判断,统计满足条件的个数即可。时间复杂度为

题目三:密码重排找规律

1️⃣:预处理所有可能的完全平方数(1 到 31622 的平方)

2️⃣:统计每个完全平方数的数字组成,按位数分类存储

3️⃣:对于输入数字,统计其数字组成,在相同位数的完全平方数中查找匹配

难度:中等

这道题目的核心是理解"数字重排"的本质:两个数字可以互相重排得到,当且仅当它们的数字组成完全相同。通过预处理所有可能的完全平方数并按位数分类,可以高效地查找与输入数字具有相同数字组成的完全平方数。

01. 图书馆藏书整理

问题描述

小兰在图书馆做志愿者,负责整理一批新到的图书。这些图书共有 本,每本书都有唯一的分类编号(用整数表示)。图书馆的规定是:只有分类编号完全相同的 本书才能组成 组进行上架,单本书无法组成一组。小兰需要统计:这批图书里一共能整理出多少组完整的图书?

输入格式

第一行包含一个整数 ,表示图书的总数量。

第二行包含 个整数 ,表示每本书的分类编号。

输出格式

输出一个整数,表示完整的图书组数。

样例输入

6
1 2 3 1 2 3
5
1 2 3 4 5

样例输出

3
0
样例 解释说明
样例1 编号 出现 次,可组成 组;编号 出现 次,可组成 组;编号 出现 次,可组成 组。合计 组。
样例2 编号 各只出现 次,均无法配对,合计 组。

数据范围

题解

这道题的核心思想是统计每种分类编号出现的次数,然后计算能组成多少组。

对于每种编号,如果它出现了 次,那么可以组成 组(向下取整)。例如,如果某个编号出现了 次,那么可以组成 组,剩下 本无法配对。

具体步骤如下:

  1. 使用哈希表(或字典、映射)记录每种编号出现的次数
  2. 读入每本书的编号时,在哈希表中对应计数加
  3. 遍历哈希表,对每种编号的计数除以 (整除),累加得到答案

为什么这个做法有效?因为每组需要恰好 本相同编号的书,所以 本书最多能组成 组,这是一个简单的数学关系。

时间复杂度,需要遍历所有图书一次,然后遍历不同的编号种类(最多 种)。对于 的数据范围,这个复杂度完全可以接受。

空间复杂度,其中 是不同编号的种类数,最多为

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

def solve():
    # 读入图书数量
    n = int(input())
    # 读入所有图书的编号
    nums = list(map(int, input().split()))
    
    # 使用字典统计每种编号出现的次数
    cnt = {}
    for num in nums:
        cnt[num] = cnt.get(num, 0) + 1
    
    # 计算能组成的组数
    res = 0
    for c in cnt.values():
        res += c // 2  # 每种编号的计数除以2
    
    print(res)

if __name__ == "__main__":
    solve()
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    
    // 使用map统计每种编号出现的次数
    map<int, int> mp;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        mp[x]++;  // 对应编号计数加1
    }
    
    // 计算能组成的组数
    int ans = 0;
    for (auto [key, val] : mp) {
        ans += val / 2;  // 每种编号的计数除以2
    }
    
    cout << ans << endl;
    return 0;
}
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 读入图书数量
        int n = sc.nextInt();
        
        // 使用HashMap统计每种编号出现的次数
        HashMap<Integer, Integer> cntMap = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int num = sc.nextInt();
            cntMap.put(num, cntMap.getOrDefault(num, 0) + 1);
        }
        
        // 计算能组成的组数
        int result = 0;
        for (int count : cntMap.values()) {
            result += count / 2;  // 每种编号的计数除以2
        }
        
        System.out.println(result);
        sc.close();
    }
}

02. 特殊日期筛选

问题描述

小基 正在研究一种特殊的日期规则。她将某些日期称为"幸运日期",当且仅当这个日期满足两个条件:日期数是一个两位数( 之间,包含边界),并且这个数字是偶数(能被 整除)。

现在给你三个正整数,代表三个日期数,请你统计其中有多少个"幸运日期"。

输入格式

输入三个整数 ,表示三个日期数。

输出格式

输出一个整数,表示这三个数中有几个幸运日期。

样例输入

8 10 11

样例输出

1
样例 解释说明
样例1 其中 同时满足"两位数且为偶数",其余两个不满足( 不是两位数; 虽是两位数但不是偶数)。因此答案为

数据范围

题解

这道题是一个简单的条件判断问题,关键是理解"幸运日期"的定义。

一个数是幸运日期需要同时满足两个条件:

  1. 是两位数:即
  2. 是偶数:即

解题思路很直接:对三个输入的数字分别判断是否满足这两个条件,如果都满足就计数加 ,最后输出计数结果。

需要注意的细节:

  • 两位数的范围是 ,不包括 及以上的数
  • 偶数的判断可以用取模运算 来实现
  • 必须同时满足两个条件,而不是满足其中一个

比如样例中的 ,虽然是偶数,但不是两位数,所以不符合; 虽然是两位数,但不是偶数,也不符合;只有 既是两位数又是偶数,所以答案是

时间复杂度,只需要对三个固定的数字进行判断。

空间复杂度,只需要常数个变量。

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

def solve():
    # 读入三个日期数
    nums = list(map(int, input().split()))
    
    # 统计幸运日期的个数
    cnt = 0
    for x in nums:
        # 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

Frank_zhan...:等11月开完奖,佬们释放一些offer再轮到我们这些双非捡漏
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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