Interview Questions
C++11 Standard
-
Explain
autotype deduction rules. What cases can’t be deduced / are common pitfalls? -
Explain the difference between
autoanddecltype. When would you use each? - What are the main benefits and pitfalls of uniform initialization
{}in C++11? - How does
nullptrdiffer fromNULLand0? Show an overload example where it matters. - What is
enum classand why is it safer than a traditionalenum? - What does
=deletedo? How is it different from making a function private? - What does
=defaultmean? 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::moveactually 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
noexceptimportant for move operations in standard containers likestd::vector? - Explain reference collapsing rules. Give examples with
T&,T&&,auto&&. - What is a “forwarding reference” (universal reference)? When is
T&¬ an rvalue reference? - Explain perfect forwarding. Why do we need
std::forward? - Compare
unique_ptr,shared_ptr, andweak_ptr. When would you use each? - Why can’t
unique_ptrbe copied? How do you transfer ownership? - What is a circular reference in
shared_ptrand how doesweak_ptrfix it? - Is
shared_ptrthread-safe? What exactly is thread-safe about it? - Why should you prefer
make_unique/make_sharedover callingnewdirectly? - Explain lambda capture modes (
[],[=],[&],[this]). What lifetime bug can occur? - What does
mutablemean 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_backandemplace_back? - Compare
std::mapandstd::unordered_map: complexity, ordering, and use cases. - Explain iterator invalidation rules for
vector,deque,list, andmap. - What is the difference between
std::begin/endand memberbegin/end? Why does it matter? - When would you choose
std::arrayoverstd::vector? - Explain
std::tupleandstd::tie. Give a practical example. - Describe how
std::threadworks. What happens if astd::threadis destroyed without join/detach? join()vsdetach()— when is each appropriate?- What is
std::async? What are the launch policies and default behavior? - Compare
std::lock_guardandstd::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
autodifferent in C++11/14 compared to the oldautokeyword 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
constexprfunction have loops and local variables in C++11 and C++14? Explain. - What is the difference between
constandconstexpr? - What are variable templates? Give an example.
- What are
std::integer_sequenceandstd::index_sequenceused for - What are user-defined literals? Give some examples from the standard library.
- What is the purpose of the
"..."sstring literal? What header and namespace are required to use it? - What is the purpose of the chrono literals such as
10msor2h? 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::exchangeused for? - Explain
noexcept. When should you mark a functionnoexcept? - What is the difference between
throw()andnoexcept? - 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_uniquerecommended over manually callingnewwhen creating astd::unique_ptr?
C++17 Standard
- What is the difference between
std::enable_ifandif 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 红黑树)及各自的适用场景。
一面面试题
- 实习和项目简介
- C++编译过程,每一步的详细解释,预处理的工作,编译汇编,涉及到编译原理,静态动态链接,如何由进程运行
- 算法题,找到1-n中丢失的两个数字
- 智力题
二面面试题
- [ ] 实习和项目简介
-
[ ] 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++方向,数学准备可以按这个跑一遍:
- 概率论
- 离散分布:伯努利、二项、泊松
- 连续分布:正态、指数
- 条件概率 / Bayes / total probability
- 泊松过程,指数间隔、无记忆性
- 统计
- 样本均值、方差,协方差、相关系数
- 回归的基本概念(OLS,不必太严)
- 假设检验 / t 统计量的计算和意义
- 线性代数
- 矩阵基本运算、正定矩阵、协方差矩阵直觉
- 简单 Ax=b 求解和“解的存在性”直觉
- 时间序列 & 微观结构(只要直觉)
- AR(1)、均值回复直觉
- 马尔可夫链、稳态分布简单计算
- limit order book / queue 作为随机过程的口头模型
如果你愿意,我可以给你出一套“高频面试风格”的 10 道小题(期望 + 泊松 + 条件概率 + 简单回归 + 订单到达建模),你可以自己做一遍当模拟面试。
一、基础概率题
- 正态收益率叠加 已知某只股票日收益率 \(R_i \sim N(\mu, \sigma^2)\),且独立同分布。 1)求连续 \(n\) 天总收益率 \(\sum_{i=1}^n R_i\) 的分布; 2)问:如果看“年化收益率”,如何近似写出其分布?
- 两个骰子点数和的分布 同时掷两个公平的六面骰子,设随机变量 \(X\) 为两骰点数之和。 1)写出 \(P(X = k)\) 的表达式(\(k=2,\dots,12\)); 2)求 \(P(X \ge 10)\)。
- 扑克牌抽牌不放回 一副 52 张标准扑克牌(不区分花色,只区分点数)。从中随机抽 5 张: 1)抽到“恰好 2 张 A”的概率是多少? 2)抽到“至少 1 张 A”的概率是多少?
- 球盒模型(简单超几何) 有一个箱子,里面有 5 个红球、7 个蓝球、8 个白球。 不放回地随机抽出 3 个球: 1)抽到 3 个颜色都不同的概率; 2)抽到至少 2 个红球的概率。
- 订单成功率问题 某支付系统中,单笔订单成功的概率为 \(p=0.97\),不同订单独立。 1)一天内有 100 笔订单,至少有 1 笔失败的概率? 2)近似情况下,如何用泊松分布近似计算“失败订单数 ≥ 2” 的概率?
- 二项分布简单题 某广告点击率 \(p=0.02\),独立展示 1000 次。设 \(X\) 为点击次数。 1)写出 \(P(X=k)\) 的表达式; 2)用合适的近似方法估计 \(P(X \ge 30)\)(提示:可以考虑正态或泊松近似)。
- 独立同分布求和的方差 已知 \(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% 的订单是异常。检测系统对异常订单检测为“异常”的概率为 99%(召回率),对正常订单误报为“异常”的概率为 1%。 问:某订单被检测为“异常”的情况下,它真实是异常订单的概率是多少?
- 垃圾邮件过滤 设邮件中 5% 是垃圾邮件(Spam),95% 是正常邮件(Ham)。 过滤器对垃圾邮件识别为垃圾的概率为 98%,对正常邮件误判为垃圾的概率为 2%。 现观察到一封邮件被标记为垃圾邮件,问它实际上是垃圾邮件的概率?
-
两个盒子问题(经典) 有两个盒子:
-
盒子 A 里有 2 个红球、1 个蓝球;
-
盒子 B 里有 1 个红球、2 个蓝球。 随机等概率选一个盒子,然后从盒子中随机取一个球,发现是红球。 问:被选中的盒子是 A 的后验概率是多少?
-
报警系统 某仓库有 0.5% 的概率在某天发生入侵。报警系统在有入侵时报警概率为 99%,在无入侵时误报概率为 0.5%。 某天报警器响了,求当天真的发生入侵的概率。
- 疾病检测多次测量 某疾病患病率为 0.1%。检测方法对患病者阳性率为 99%,对健康者误检阳性率为 1%。 现对同一个人独立检测 2 次,结果都是阳性。问此人患病的后验概率(假设两次测试独立)。
- 异常多层筛查 某电商每天 10 万订单,历史上 1% 有欺诈风险。先用一个粗筛系统,召回率 95%,误报率 5%;然后对被粗筛标记为“可疑”的订单再用精细模型复检,复检的召回率为 99%,误报率为 1%。 问:通过两级筛查最终落在“高危名单”的订单中,真实欺诈订单的大致比例(可以给表达式即可)。
-
多类别贝叶斯分类 有三类客户:
-
高价值客户占 10%,会购买某产品的概率为 80%;
- 中价值客户占 30%,购买概率 40%;
- 低价值客户占 60%,购买概率 10%。 现在观察到一个随机客户完成了购买,问他是高价值客户的后验概率是多少?
三、期望 & 方差题
- 抛硬币直到出现第一个正面(几何分布) 硬币正面概率为 \(p\),反面为 \(1-p\)。不断抛掷,直到首次出现正面为止。 1)设随机变量 \(N\) 表示所需次数,求 \(\mathbb{E}[N]\); 2)求 \(\mathrm{Var}(N)\)。
- 骰子点数的期望和方差 掷一个公平六面骰子,点数为 \(1,\dots,6\)。 1)求点数的期望 \(\mathbb{E}[X]\); 2)求方差 \(\mathrm{Var}(X)\)。
- 直到出现两个正面 公平硬币(正反均为 0.5),不断抛掷,直到“累计出现两个正面”为止。 1)设 \(N\) 为总抛掷次数,求 \(\mathbb{E}[N]\); 2)给出计算思路(可以用负二项分布)。
-
排队服务时间(和的期望、方差) 客户到达某柜台后,需要完成两道独立手续:
-
第一道办理时间 \(X\),\(\mathbb{E}[X]=2\) 分钟,\(\mathrm{Var}(X)=1\);
-
第二道办理时间 \(Y\),\(\mathbb{E}[Y]=3\) 分钟,\(\mathrm{Var}(Y)=4\)。 假设 \(X,Y\) 独立。 1)总时间 \(T=X+Y\) 的期望和方差是多少? 2)如果有 10 个客户排队,每人总时间独立同分布为 \(T\),求所有人办完的总时间的期望和方差。
-
随机游走一步的期望 一维随机游走:当前位置为 0,每一步以概率 \(p\) 向右走 1,以概率 \(1-p\) 向左走 1。 1)走一步后位置 \(X_1\) 的期望与方差是多少? 2)走 \(n\) 步后位置 \(S_n = \sum_{i=1}^n X_i\) 的期望和方差?
-
抽奖期望收益 某抽奖活动规则:
-
以 0.9 的概率什么都得不到;
- 以 0.08 的概率获得 50 元;
-
以 0.02 的概率获得 500 元。 参加一次抽奖需要支付 10 元。 问:参加一次抽奖的期望净收益是多少?长期玩这游戏是赚还是亏?
-
优惠券收集(简化版) 某活动有 3 种不同的卡牌,每次随机获得一种,概率均等且独立。 1)从零开始收集,直到三种都集齐为止,所需抽取次数的期望? 2)给出通用思路(推广到 \(n\) 种卡牌的情形)。
- 随机变量函数的期望 掷一次公平骰子,点数为 \(X\)。定义收益为
求收益的期望 \(\mathbb{E}[Y]\) 和方差 \(\mathrm{Var}(Y)\)。
四、简单脑筋急转弯 / 思维题(灯 / 水壶 / 天平)
- 100 盏灯问题(经典变体) 有 100 盏灯,编号 1 到 100,起初全部关闭。 有 100 个人依次操作,第 \(k\) 个人会“切换”所有编号为 \(k\) 的倍数的灯(开→关,关→开)。 问:所有人操作完后,最后有几盏灯是亮着的?它们的编号是什么?(你可以先从小规模,如 10 盏灯,开始观察模式。)
- 一般化灯问题 将上题推广:有 \(N\) 盏灯、\(N\) 个人。写出对任意 \(N\) 时,亮灯的编号特征(可描述为一种数学性质)。
- 三水壶问题 有容量分别为 8 升、5 升、3 升的三个水壶,其中 8 升壶装满水,其他为空。没有量杯。 你可以在壶之间任意倒水,但不能估量中间刻度。 问:是否有办法得到恰好 4 升水?如果有,给出操作步骤;如果没有,说明理由。
- 两边天平找次品(称重) 有 12 枚外观完全相同的硬币,其中有 1 枚是假币,重量未知,只知道它比真币要重或轻,但不知道是重还是轻。 使用一个两边天平(只能比较左右哪边重),问: 1)在最优策略下,最多用 3 次称重是否能一定找出假币并判断其轻重? 2)如果可以,请给出大致策略思路。
- 一堆求最重硬币 有 9 个外观一样的砝码,其中 1 个比其他的重,其余 8 个重量相同。 用两边天平,最少需要几次称重就可以保证找出最重的那个?给出策略。
- 水壶装水时间问题(算法味道) 有一台饮水机,出水速度恒定。你有一个容量为 5L 的壶和一个容量为 3L 的壶,都没有刻度。 现在想量出 4L 的水装入 5L 壶,允许你多次装满/倒掉水。问题: 1)是否可行? 2)如果可行,写出一个“操作序列算法”(用步骤表示状态变换)。
- 运算符插入(思维+穷举) 给定数字 1,2,3,4,可以在它们之间插入 “+”、“-”、“×”、“÷”、括号,使得表达式结果等于 24。 问:能否构造出一个合法表达式?如果可以,给出一个例子;如果不可以,说明理由。 (这个题本身不难,主要考察你构造 / 搜索思路,可以扩展为用程序搜索。)
- 一维线段切割(几何期望思维) 在长度为 1 的线段上随机独立选取 2 个点,将线段分成 3 段。 问:这 3 段能构成三角形的概率是多少? (提示:可以画二维平面区域,转化为几何概率。)