【笔试刷题】电信-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 | 编号 |
数据范围
题解
这道题的核心思想是统计每种分类编号出现的次数,然后计算能组成多少组。
对于每种编号,如果它出现了 次,那么可以组成
组(向下取整)。例如,如果某个编号出现了
次,那么可以组成
组,剩下
本无法配对。
具体步骤如下:
- 使用哈希表(或字典、映射)记录每种编号出现的次数
- 读入每本书的编号时,在哈希表中对应计数加
- 遍历哈希表,对每种编号的计数除以
(整除),累加得到答案
为什么这个做法有效?因为每组需要恰好 本相同编号的书,所以
本书最多能组成
组,这是一个简单的数学关系。
时间复杂度:,需要遍历所有图书一次,然后遍历不同的编号种类(最多
种)。对于
的数据范围,这个复杂度完全可以接受。
空间复杂度:,其中
是不同编号的种类数,最多为
。
参考代码
- 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 | 其中 |
数据范围
题解
这道题是一个简单的条件判断问题,关键是理解"幸运日期"的定义。
一个数是幸运日期需要同时满足两个条件:
- 是两位数:即
- 是偶数:即
解题思路很直接:对三个输入的数字分别判断是否满足这两个条件,如果都满足就计数加 ,最后输出计数结果。
需要注意的细节:
- 两位数的范围是
,不包括
及以上的数
- 偶数的判断可以用取模运算
来实现
- 必须同时满足两个条件,而不是满足其中一个
比如样例中的 ,虽然是偶数,但不是两位数,所以不符合;
虽然是两位数,但不是偶数,也不符合;只有
既是两位数又是偶数,所以答案是
。
时间复杂度:,只需要对三个固定的数字进行判断。
空间复杂度:,只需要常数个变量。
参考代码
- Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve():
# 读入三个日期数
nums = list(map(int, input().split()))
# 统计幸运日期的个数
cnt = 0
for x in nums:
#
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力
