Skip to content

Interview Questions

C++11 Standard

  • Explain auto type deduction rules. What cases can’t be deduced / are common pitfalls?

  • Explain the difference between auto and decltype. When would you use each?

  • What are the main benefits and pitfalls of uniform initialization {} in C++11?
  • How does nullptr differ from NULL and 0? Show an overload example where it matters.
  • What is enum class and why is it safer than a traditional enum?
  • What does =delete do? How is it different from making a function private?
  • What does =default mean? When is it useful?
  • What is override? What bug does it prevent?
  • Explain the “rule of five” in C++11.
  • What problem do rvalue references solve? Why wasn’t copy elision enough?
  • What does std::move actually do? Does it move anything by itself?
  • When will the compiler not generate a move constructor / move assignment operator?
  • Write a typical move constructor and move assignment for a resource-owning class. What are the key rules?
  • Why is noexcept important for move operations in standard containers like std::vector?
  • Explain reference collapsing rules. Give examples with T&, T&&, auto&&.
  • What is a “forwarding reference” (universal reference)? When is T&& not an rvalue reference?
  • Explain perfect forwarding. Why do we need std::forward?
  • Compare unique_ptr, shared_ptr, and weak_ptr. When would you use each?
  • Why can’t unique_ptr be copied? How do you transfer ownership?
  • What is a circular reference in shared_ptr and how does weak_ptr fix it?
  • Is shared_ptr thread-safe? What exactly is thread-safe about it?
  • Why should you prefer make_unique / make_shared over calling new directly?
  • Explain lambda capture modes ([], [=], [&], [this]). What lifetime bug can occur?
  • What does mutable mean on a lambda?
  • How would you store a capturing lambda in a variable?
  • What is the type of a lambda? Can you name it?
  • What’s the difference between push_back and emplace_back?
  • Compare std::map and std::unordered_map: complexity, ordering, and use cases.
  • Explain iterator invalidation rules for vector, deque, list, and map.
  • What is the difference between std::begin/end and member begin/end? Why does it matter?
  • When would you choose std::array over std::vector?
  • Explain std::tuple and std::tie. Give a practical example.
  • Describe how std::thread works. What happens if a std::thread is destroyed without join/detach?
  • join() vs detach() — when is each appropriate?
  • What is std::async? What are the launch policies and default behavior?
  • Compare std::lock_guard and std::unique_lock.
  • What’s a data race? Give an example and explain how to fix it.
  • Why is RAII fundamental in C++? How does it relate to exception safety?
  • What are the major exception safety guarantees (basic/strong/nothrow)?
  • Why is multiple inheritance tricky? How does virtual inheritance help?
  • What is type erasure? Give an example (std::function, any, etc.).
  • Implement a small RAII class that owns a file descriptor / handle. Support move, forbid copy.
  • Write a thread-safe singleton in C++11 and explain why it’s safe.
  • Given a vector of structs, sort by a field using a lambda, then remove duplicates.
  • Implement ScopeGuard: execute a callback automatically on scope exit.

C++14 Standard

  • What is a generic lambda? How does it differ from C++11 lambdas?
  • What is an init-capture (generalized lambda capture) in C++14? Give an example use case.
  • How is auto different in C++11/14 compared to the old auto keyword in C++98?
  • Explain return type deduction for functions in C++14. How is it different from C++11 trailing return types?
  • What is constexpr? How did its capabilities change from C++11 to C++14?
  • Can a constexpr function have loops and local variables in C++11 and C++14? Explain.
  • What is the difference between const and constexpr?
  • What are variable templates? Give an example.
  • What are std::integer_sequence and std::index_sequence used for
  • What are user-defined literals? Give some examples from the standard library.
  • What is the purpose of the "..."s string literal? What header and namespace are required to use it?
  • What is the purpose of the chrono literals such as 10ms or 2h? How do you enable them?
  • What does the [[deprecated]] attribute do? When would you use it?
  • Explain binary literals and digit separators in C++14. Why are they helpful?
  • What is std::exchange used for?
  • Explain noexcept. When should you mark a function noexcept?
  • What is the difference between throw() and noexcept?
  • What is the “most vexing parse” and how does uniform initialization help with it?
  • What is SFINAE? Why is it important in template metaprogramming?
  • When do you need a virtual destructor?
  • What is a memory leak and how can you avoid it in modern C++?
  • Describe three important new features that C++14 adds on top of C++11.
  • Write a C++14 function that returns a std::vector<int> using auto return type deduction.
  • What are the advantages of using digit separators (') in numeric literals? Give an example.
  • Why is std::make_unique recommended over manually calling new when creating a std::unique_ptr?

C++17 Standard

  • What is the difference between std::enable_if and if constexpr (C++17) in terms of usage?
  • What is copy elision? How did the standard change in C++17 regarding copy elision?

佳期

https://xuan-insr.github.io/interviews/overview/

C++ 语言深度(基础与进阶),这是重中之重,面试官会深入考察你是否真正理解C++而不仅仅是会用。

A.内存管理🎯

new/delete 和 malloc/free 的区别、内存对齐(alignment)、内存碎片、智能指针(unique_ptr, shared_ptr, weak_ptr 的原理、使用场景和陷阱)。

B.对象模型🎯

虚函数表(vtable/vptr)机制、多重继承下的内存布局、RTTI(运行时类型识别)。

C.常量正确性🎯

const 关键字在各类场景下的应用(成员函数、指针、引用等)。

D.引用与指针🎯

左值引用、右值引用(&&)、移动语义(move semantics)、完美转发(perfect forwarding)的原理和优势。这是高频考点,因为能极大提升性能。

E.模板编程🎯

函数模板、类模板、模板特化、变参模板。可能会问到模板元编程(TMP)的基本概念,如类型萃取(type traits)。

F.STL 深度使用与实现🎯

不仅要知道怎么用,更要了解其底层实现和复杂度。

std::vector 的动态增长机制及如何优化。

std::unordered_map 与 std::map 的底层实现(哈希表 vs 红黑树)及各自的适用场景。

一面面试题

  1. 实习和项目简介
  2. C++编译过程,每一步的详细解释,预处理的工作,编译汇编,涉及到编译原理,静态动态链接,如何由进程运行
  3. 算法题,找到1-n中丢失的两个数字
  4. 智力题

二面面试题

  • [ ] 实习和项目简介
  • [ ] C++拷打

  • [ ] 2.1 虚函数的底层以及弊端,深入到《深入探索对象模型》了

  • [ ] 2.2 map和unordered_map的底层实现,包括对排序等的重载,深入到《STL源码解析》
  • [ ] 2.3 C++14、17、20的新特性,模板推导,异步,协程
  • [ ] 2.4 lambda函数的作用,大体形式,优缺点以及使用时机
  • [ ] 2.5 C++链接的具体实现,重定向,地址绑定
  • [ ] 2.6 C++链接的函数重名问题

  • 计算机网络

  • [ ] 3.1 VLAN相关

  • [ ] 3.2 讲一讲MTU,涉及到IP层的数据包大小

  • 操作系统

  • [ ] 4.1 cache的级别,以及内存,L1,L2的具体耗时

  • 算法与数据结构

  • [ ] 5.1 大数乘法的实现,用vector或者链表模拟

一面

https://www.dianhsu.com/2022/07/22/autumn-interviews/

然后面试官在

  • C++
  • C++14/17/20的新特性
  • 智能指针
  • 操作系统
  • 缺页中断
  • L1/L2/L3 cache的访问时间和容量 https://gist.github.com/jboner/2841832
  • CPU线程上下文切换
  • 计算机网络
  • TCP和UDP
  • 拥塞控制
  • TCP版本兼容
  • 编译原理
  • 程序编译过程
  • 静态链接库和动态链接库
  • Redis
  • Redis数据结构

等方面,各问了几个问题。刚开始提的问题比较简单,但是面试官在每个问题之后,几乎都追问了一下。

  • 最后,来一道算法题,这道题是Codeforces上面的原题Game on Tree,面试官一开始没有说数据范围,我就问了一下,他说:有个小数据n=10,还有个n=1e5的数据,你可以先花10分钟想想n=1e5的数据怎么写,没想出来再写个n=10的。然后我并没有想出这个题的结论,最后写了个n=10的思路。

写完算法题之后,我感觉应该后面没有其他问题了,就问了一下算法题n=1e5数据的解法。

问题整理:

  • [ ] 你在C++上的经历有哪些
  • [ ] 你对C++的新标准了解到什么程度
  • [ ] 一般对C++的类来说,memory layout有哪些成分
  • [ ] 如果对象涉及到继承呢
  • [ ] 具体说一下虚继承是什么状态
  • [ ] 假设一个类继承了有虚函数的类,父类会存在在子类中吗
  • [ ] 一个空的类占多大内存
  • [ ] 虚表里除了可能有虚函数,还可能有什么
  • [ ] 如果一个函数是成员模板函数,可以被声明为虚函数吗
  • [ ] inline关键字
  • [ ] 虚函数可以内联吗
  • [ ] optional取size是多大
  • [ ] 描述一下C++编译的整个过程
  • [ ] 如果头文件定义了函数,源文件不实现,会在哪个环节报错
  • [ ] 如果构建的是静态库,会报错吗,为什么
  • [ ] 对静态库和动态库的理解
  • [ ] stl中的智能指针有哪些
  • [ ] 一个shared_ptr大小是多大
  • [ ] 使用时如何决定用哪个智能指针
  • [ ] unique_ptr取sizeof多大
  • [ ] 不同智能指针性能上有什么区别
  • [ ] 如果只是用指针解引用,性能上
  • [ ] C++多线程中常用的mutex是怎么实现的,和自旋锁有什么区别
  • [ ] atomic内部实现
  • [ ] 是有锁还是没锁的
  • [ ] 所有的原子变量都没锁吗
  • [ ] 对原子变量的内存序有了解吗
  • [ ] 描述一下cpu怎么从内存中获取数据的,要经过哪些模块
  • [x] 介绍一下cpu中的cache
  • [ ] 说下不同层级的cache现实中常见的速度
  • [ ] 通过什么方式写出对cache更友好的代码
  • [x] 你知道虚拟内存吗
  • [x] 线程和进程的区别
  • [x] 它们在Linux的实现上的区别

造轮子

  • [ ] 智能指针(unique_ptr, shared_ptr, weak_ptr)
  • [x] unqiueptr
  • [ ] sharedptr
  • [ ] weakptr

  • [ ] STL容器 (vector, string), Allocator

  • [ ] vector
  • [ ] string
  • [ ] allocator

  • [ ] 池组件

  • [ ] 线程池
  • [x] 内存池
  • [ ] 连接池
  • [ ] 线程安全队列
  • [ ] 阻塞队列
  • [ ] 无锁队列
  • [ ] 优先级队列
  • [x] 手写定时器
  • [ ] 红黑树
  • [ ] 最小堆
  • [ ] 时间轮
  • [ ] 手写用户态网络缓冲区
  • [ ] 定长缓冲区
  • [x] 环形缓冲区
  • [ ] 块状链表缓冲区
  • [ ] 双缓冲区
  • [ ] 死锁检测
  • [ ] 内存泄露检测
  • [ ] 日志库
  • [ ] 设计模式
  • [ ] 高性能网络库

1. 概率论 & 随机过程(核心)

高频必考的是这类:

1.1 到达过程 / 泊松过程

典型知识点:

  • 泊松分布、指数分布(到达时间)
  • 独立泊松过程的叠加、拆分
  • 排队模型的直觉:M/M/1, M/M/k 那一类(不用背公式,但要有感觉)

典型问题:

  • 订单到达建模

假设订单到达是强度为 λ 的泊松过程,1 秒内至少有一单的概率多少? 两秒内有 k 单的概率呢?

  • 指数分布的无记忆性

解释一下指数分布的无记忆性,在订单到达时间上意味着什么?


1.2 简单马尔可夫链 / 状态转移

  • 用 2–3 个状态描述价差状态 / 队列位置 / 挂单是否被 hit
  • 会让你写出转移矩阵、求稳态分布 / n 步转移概率。

例题感觉:

有三个价差状态:1 tick、2 tick、3 tick。给出转移概率矩阵 P,问稳态下处于 1 tick 的概率是多少? 或者:从当前状态出发,2 步后在某状态的概率?


1.3 随机游走 / hitting time

  • 简单对称/非对称随机游走
  • hitting probability / hitting time(击中某条边界)

比如:

价格做简单随机游走,每步 +1 或 -1,p 为上涨概率,1-p 为下跌。 问从 0 出发先到 +a 还是 -b 的概率是多少?

这是做止盈/止损、风控的基础直觉。


2. 统计 & 假设检验(辨别“策略是不是瞎拟合”)

高频里,策略迭代很快,数据很多,统计显著性 / 置信度很重要。

2.1 基本统计量

  • 样本均值、方差、标准差
  • 协方差 / 相关系数
  • 夏普比率、最大回撤等风险指标

题型:

给你 N 天/笔的 PnL,问:

  • 日均收益、波动率怎么计算?
  • 夏普比率怎么算?
  • 日波动想换成年化波动怎么办(√时间的缩放)?

2.2 简单假设检验 & p-value

  • H0: 策略 alpha = 0
  • H1: alpha > 0 用 t 检验之类。

问法:

你有一组策略日收益数据,平均为 μ_hat,标准差 s,共 N 个样本。

  • 怎么判断这个策略是否“显著赚钱”而不是噪声?
  • 如何粗略算它的 t-stat 和 p-value?

面试官想确认你不会一看到正收益就兴奋,知道要考虑 sample size & variance。


2.3 自相关 / 简单时间序列

  • 一阶自相关系数
  • AR(1): X_t = ρ X_{t-1} + ε_t 的直觉

可能会问:

如果一个收益序列有显著自相关,你会怎么利用/怎么处理? 比如:是不是可以做某种 mean reversion 策略?


3. 极值 / 风控 & tail risk 直觉

高频策略经常“正常的时候赚一点点,极端时亏很多”。 面试可能会考你对极端事件 / tail risk的感觉。

  • 正态 vs heavy-tail 的直觉(t 分布、稳定分布)
  • VaR / CVaR 的概念(不用太公式党)

题型更多是聊天:

如果策略日收益看起来很稳定,但偶尔有非常罕见的大亏损,你怎么看? 怎么从统计角度判断这是不是 fat tail? 你会怎么设风控阈值?


4. 微观结构 / Order Book 相关的“数学”

严格说这不全是数学,更偏模型直觉,但高频很爱问:

  • Limit order / market order / mid price / spread 的定义
  • Order book 的简单随机模型(到达是泊松、撤单是泊松)
  • Position / inventory 控制的简单优化:
  • 盈利 vs inventory 风险的 trade-off

可能的题:

你挂一个 bid,在队列里位置是第 k, 假设到达 hit 的订单是泊松过程,撤单也有一定概率,你怎么估计自己在某段时间内被成交的概率?

这里不是要你给 closed-form,而是看你:

  • 知道可以抽象成“队列长度的随机过程”
  • 想得到“arrival - cancellation”类似 birth–death 过程的味道。

5. 简单优化 / 控制(但通常不会太难)

  • 比如:在给定风险限制下 maximizing E[PnL] – λ * Var(PnL)
  • 或者一个极简的 LQ control(线性二次)直觉。

例子:

你有一个简单的做市策略,每个 tick 收到一个随机收益 R_t,同时头寸持有有 quadratic penalty(inventory²),你会怎么设计一个简单的 penalty/控制参数来避免头寸爆炸?

一般属于聊思路,很少要求你在白板推完整 LQG。


6. 高频特有的“数感题 / 估算题”

这类在高频岗概率挺高:

  • 延迟对机会成本的影响:

从 100μs 降到 10μs,大约多出多少可见的成交机会 / queue 优势?(大方向的直觉)

  • 吞吐量 / 带宽估算:

1Gbps 一秒能传多少条 100bytes 的消息? (经典:算 bit → byte → message 数)。

  • 随机事件稀疏/密集的估算:

订单以 λ=1000/s 到达,1ms 内来 0、1、2 单的概率大概多少?


7. 怎么准备(给你个 checklist)

针对高频 + C++方向,数学准备可以按这个跑一遍:

  1. 概率论
  2. 离散分布:伯努利、二项、泊松
  3. 连续分布:正态、指数
  4. 条件概率 / Bayes / total probability
  5. 泊松过程,指数间隔、无记忆性
  6. 统计
  7. 样本均值、方差,协方差、相关系数
  8. 回归的基本概念(OLS,不必太严)
  9. 假设检验 / t 统计量的计算和意义
  10. 线性代数
  11. 矩阵基本运算、正定矩阵、协方差矩阵直觉
  12. 简单 Ax=b 求解和“解的存在性”直觉
  13. 时间序列 & 微观结构(只要直觉)
  14. AR(1)、均值回复直觉
  15. 马尔可夫链、稳态分布简单计算
  16. limit order book / queue 作为随机过程的口头模型

如果你愿意,我可以给你出一套“高频面试风格”的 10 道小题(期望 + 泊松 + 条件概率 + 简单回归 + 订单到达建模),你可以自己做一遍当模拟面试。

一、基础概率题

  1. 正态收益率叠加 已知某只股票日收益率 \(R_i \sim N(\mu, \sigma^2)\),且独立同分布。 1)求连续 \(n\) 天总收益率 \(\sum_{i=1}^n R_i\) 的分布; 2)问:如果看“年化收益率”,如何近似写出其分布?
  2. 两个骰子点数和的分布 同时掷两个公平的六面骰子,设随机变量 \(X\) 为两骰点数之和。 1)写出 \(P(X = k)\) 的表达式(\(k=2,\dots,12\)); 2)求 \(P(X \ge 10)\)
  3. 扑克牌抽牌不放回 一副 52 张标准扑克牌(不区分花色,只区分点数)。从中随机抽 5 张: 1)抽到“恰好 2 张 A”的概率是多少? 2)抽到“至少 1 张 A”的概率是多少?
  4. 球盒模型(简单超几何) 有一个箱子,里面有 5 个红球、7 个蓝球、8 个白球。 不放回地随机抽出 3 个球: 1)抽到 3 个颜色都不同的概率; 2)抽到至少 2 个红球的概率。
  5. 订单成功率问题 某支付系统中,单笔订单成功的概率为 \(p=0.97\),不同订单独立。 1)一天内有 100 笔订单,至少有 1 笔失败的概率? 2)近似情况下,如何用泊松分布近似计算“失败订单数 ≥ 2” 的概率?
  6. 二项分布简单题 某广告点击率 \(p=0.02\),独立展示 1000 次。设 \(X\) 为点击次数。 1)写出 \(P(X=k)\) 的表达式; 2)用合适的近似方法估计 \(P(X \ge 30)\)(提示:可以考虑正态或泊松近似)。
  7. 独立同分布求和的方差 已知 \(X_1, \dots, X_n\) 独立同分布,\(\mathbb{E}[X_i]=\mu\)\(\mathrm{Var}(X_i)=\sigma^2\)。 1)求 \(S_n = \sum_{i=1}^n X_i\) 的期望和方差; 2)求 \(\bar{X} = S_n / n\) 的期望和方差。

二、条件概率 / 贝叶斯题

  1. 异常检测(医疗检测同型题) 某系统中,有 1% 的订单是异常。检测系统对异常订单检测为“异常”的概率为 99%(召回率),对正常订单误报为“异常”的概率为 1%。 问:某订单被检测为“异常”的情况下,它真实是异常订单的概率是多少?
  2. 垃圾邮件过滤 设邮件中 5% 是垃圾邮件(Spam),95% 是正常邮件(Ham)。 过滤器对垃圾邮件识别为垃圾的概率为 98%,对正常邮件误判为垃圾的概率为 2%。 现观察到一封邮件被标记为垃圾邮件,问它实际上是垃圾邮件的概率?
  3. 两个盒子问题(经典) 有两个盒子:

  4. 盒子 A 里有 2 个红球、1 个蓝球;

  5. 盒子 B 里有 1 个红球、2 个蓝球。 随机等概率选一个盒子,然后从盒子中随机取一个球,发现是红球。 问:被选中的盒子是 A 的后验概率是多少?

  6. 报警系统 某仓库有 0.5% 的概率在某天发生入侵。报警系统在有入侵时报警概率为 99%,在无入侵时误报概率为 0.5%。 某天报警器响了,求当天真的发生入侵的概率。

  7. 疾病检测多次测量 某疾病患病率为 0.1%。检测方法对患病者阳性率为 99%,对健康者误检阳性率为 1%。 现对同一个人独立检测 2 次,结果都是阳性。问此人患病的后验概率(假设两次测试独立)。
  8. 异常多层筛查 某电商每天 10 万订单,历史上 1% 有欺诈风险。先用一个粗筛系统,召回率 95%,误报率 5%;然后对被粗筛标记为“可疑”的订单再用精细模型复检,复检的召回率为 99%,误报率为 1%。 问:通过两级筛查最终落在“高危名单”的订单中,真实欺诈订单的大致比例(可以给表达式即可)。
  9. 多类别贝叶斯分类 有三类客户:

  10. 高价值客户占 10%,会购买某产品的概率为 80%;

  11. 中价值客户占 30%,购买概率 40%;
  12. 低价值客户占 60%,购买概率 10%。 现在观察到一个随机客户完成了购买,问他是高价值客户的后验概率是多少?

三、期望 & 方差题

  1. 抛硬币直到出现第一个正面(几何分布) 硬币正面概率为 \(p\),反面为 \(1-p\)。不断抛掷,直到首次出现正面为止。 1)设随机变量 \(N\) 表示所需次数,求 \(\mathbb{E}[N]\); 2)求 \(\mathrm{Var}(N)\)
  2. 骰子点数的期望和方差 掷一个公平六面骰子,点数为 \(1,\dots,6\)。 1)求点数的期望 \(\mathbb{E}[X]\); 2)求方差 \(\mathrm{Var}(X)\)
  3. 直到出现两个正面 公平硬币(正反均为 0.5),不断抛掷,直到“累计出现两个正面”为止。 1)设 \(N\) 为总抛掷次数,求 \(\mathbb{E}[N]\); 2)给出计算思路(可以用负二项分布)。
  4. 排队服务时间(和的期望、方差) 客户到达某柜台后,需要完成两道独立手续:

  5. 第一道办理时间 \(X\)\(\mathbb{E}[X]=2\) 分钟,\(\mathrm{Var}(X)=1\)

  6. 第二道办理时间 \(Y\)\(\mathbb{E}[Y]=3\) 分钟,\(\mathrm{Var}(Y)=4\)。 假设 \(X,Y\) 独立。 1)总时间 \(T=X+Y\) 的期望和方差是多少? 2)如果有 10 个客户排队,每人总时间独立同分布为 \(T\),求所有人办完的总时间的期望和方差。

  7. 随机游走一步的期望 一维随机游走:当前位置为 0,每一步以概率 \(p\) 向右走 1,以概率 \(1-p\) 向左走 1。 1)走一步后位置 \(X_1\) 的期望与方差是多少? 2)走 \(n\) 步后位置 \(S_n = \sum_{i=1}^n X_i\) 的期望和方差?

  8. 抽奖期望收益 某抽奖活动规则:

  9. 以 0.9 的概率什么都得不到;

  10. 以 0.08 的概率获得 50 元;
  11. 以 0.02 的概率获得 500 元。 参加一次抽奖需要支付 10 元。 问:参加一次抽奖的期望净收益是多少?长期玩这游戏是赚还是亏?

  12. 优惠券收集(简化版) 某活动有 3 种不同的卡牌,每次随机获得一种,概率均等且独立。 1)从零开始收集,直到三种都集齐为止,所需抽取次数的期望? 2)给出通用思路(推广到 \(n\) 种卡牌的情形)。

  13. 随机变量函数的期望 掷一次公平骰子,点数为 \(X\)。定义收益为
\[ Y = \begin{cases} 0, & X \le 3 \\ X^2, & X > 3 \end{cases} \]

求收益的期望 \(\mathbb{E}[Y]\) 和方差 \(\mathrm{Var}(Y)\)


四、简单脑筋急转弯 / 思维题(灯 / 水壶 / 天平)

  1. 100 盏灯问题(经典变体) 有 100 盏灯,编号 1 到 100,起初全部关闭。 有 100 个人依次操作,第 \(k\) 个人会“切换”所有编号为 \(k\) 的倍数的灯(开→关,关→开)。 问:所有人操作完后,最后有几盏灯是亮着的?它们的编号是什么?(你可以先从小规模,如 10 盏灯,开始观察模式。)
  2. 一般化灯问题 将上题推广:有 \(N\) 盏灯、\(N\) 个人。写出对任意 \(N\) 时,亮灯的编号特征(可描述为一种数学性质)。
  3. 三水壶问题 有容量分别为 8 升、5 升、3 升的三个水壶,其中 8 升壶装满水,其他为空。没有量杯。 你可以在壶之间任意倒水,但不能估量中间刻度。 问:是否有办法得到恰好 4 升水?如果有,给出操作步骤;如果没有,说明理由。
  4. 两边天平找次品(称重) 有 12 枚外观完全相同的硬币,其中有 1 枚是假币,重量未知,只知道它比真币要重或轻,但不知道是重还是轻。 使用一个两边天平(只能比较左右哪边重),问: 1)在最优策略下,最多用 3 次称重是否能一定找出假币并判断其轻重? 2)如果可以,请给出大致策略思路。
  5. 一堆求最重硬币 有 9 个外观一样的砝码,其中 1 个比其他的重,其余 8 个重量相同。 用两边天平,最少需要几次称重就可以保证找出最重的那个?给出策略。
  6. 水壶装水时间问题(算法味道) 有一台饮水机,出水速度恒定。你有一个容量为 5L 的壶和一个容量为 3L 的壶,都没有刻度。 现在想量出 4L 的水装入 5L 壶,允许你多次装满/倒掉水。问题: 1)是否可行? 2)如果可行,写出一个“操作序列算法”(用步骤表示状态变换)。
  7. 运算符插入(思维+穷举) 给定数字 1,2,3,4,可以在它们之间插入 “+”、“-”、“×”、“÷”、括号,使得表达式结果等于 24。 问:能否构造出一个合法表达式?如果可以,给出一个例子;如果不可以,说明理由。 (这个题本身不难,主要考察你构造 / 搜索思路,可以扩展为用程序搜索。)
  8. 一维线段切割(几何期望思维) 在长度为 1 的线段上随机独立选取 2 个点,将线段分成 3 段。 问:这 3 段能构成三角形的概率是多少? (提示:可以画二维平面区域,转化为几何概率。)