LOOP 01 / INTERVIEW LOOP / 4H
用一个循环说清接口和边界
你第一次在白板上写 C++。面试官关心你能否在很小的问题里保持输入、循环边界和返回值一致;本周不要求数组、哈希或二分。
完成单元 10 · 空值、const指针与有效访问及其先备后安排本次训练。不绑定日历周。
先写自己的答案,再展开参考。这里按技能编写问题,不声称公司真题;自评与阅读都不会自动通过 G0。
先备与学习位置
TIME WITH OUTPUTS
240 分钟怎样用
闭卷恢复先备 · 15min
不查书解释变量初始化、% 的含义、值参数与引用参数;各写一个 2 行小例子。
留下:先不查章节,写三条判断和一个不确定点;再只补读相关章节的解释段。
澄清题目与手算 · 25min
读主问题,逐条写输入、输出、范围与失败行为。手算前两个公开用例,给自己的方案找一个反例。
留下:一份接口合同、逐步状态表和最小反例;不要先打开参考推演。
独立实现或设计 · 55min
实现 int count_multiples(int n, int k):统计闭区间 [1,n] 内能被 k 整除的整数个数。先写普通 for 循环版,再解释每次循环检查哪一个整数。不要用除法公式替代本次循环练习。
留下:保存个人代码或设计稿。编码题保留编译命令;设计题为每个事件编号,不能只画没有状态的箭头。
边界与反证 · 25min
用题目的全部公开用例核对真实输出;另外创造一个与公开输入不同的边界。发现失败时缩小输入,再解释修复。
留下:实际结果、原始失败和修复原因各一份;设计题记录一个被拒绝的执行顺序。
按表现进入追问树 · 35min
从 n1 开始。每题先录下自己的回答,再展开标准;按满足或未满足条件跳转。树最多走一轮,卡住时把剩余时间用于分支中的纠错,不循环加时。
留下:记录经过的节点、原话、缺失条件和修订;只会复述标准的节点仍标记待重做。
英文口述与打断 · 30min
用本页英文提纲录制两轮 90 秒回答;第二轮在 30 秒处自问追问,先回答追问再回到主线。每轮回听并改写两个含糊句。
留下:两轮录音或逐字稿;圈出输入、因果、边界和限制各一句。参考英文在录完第一轮后再读。
复盘与安排重做 · 25min
对照强弱答案,选择一个真正出错的环节:合同、状态、实现、验证或表达。填本页记录模板,并约定下一天的 30 分钟。
留下:一个有失败输入的错误记录和一个可观察修复标准;不要把全部问题归因为粗心。
次日无答案重做 · 30min
次日实现 count_even_between(lo,hi),只接受 0≤lo≤hi≤20,统计闭区间偶数个数,其他输入返回 -1。使用普通循环,先写 [0,0]、[3,7]、[8,3] 的预期再运行。
留下:这是本周 240 分钟中的最后 30 分钟,不另加预算。先关闭解答,用 20 分钟独立做,再用 10 分钟核验并记录是否仍需复习。
包括次日重做,总计 240min。局部错因复盘属于本次练习,额外的计划复盘按实际需要另记。
SOLVE BEFORE READING THE ANSWER
先独立处理这个问题
实现 int count_multiples(int n, int k):统计闭区间 [1,n] 内能被 k 整除的整数个数。先写普通 for 循环版,再解释每次循环检查哪一个整数。不要用除法公式替代本次循环练习。
输入与输出合同
- n 只接受 0 到 100,k 只接受 1 到 10;任意一个超出范围就返回 -1。
- 合法输入返回计数;n=0 是空区间,结果为 0。
- 传参按值,不修改调用者的 n 和 k;循环变量必须初始化。
手算之后,对照公开用例
| 输入或情形 | 预期 | 为什么 |
|---|---|---|
| n=7, k=2 | 3 | 符合条件的是 2、4、6。 |
| n=0, k=3 | 0 | 空区间不进入循环。 |
| n=6, k=3 | 2 | 必须包含右端点 6。 |
| n=5, k=0 | -1 | 先拒绝输入,不能执行对 0 取余。 |
| n=101, k=2 | -1 | 超过接口上界。 |
先保留自己的解法、状态轨迹与验证记录,再打开参考。允许用自然语言或伪代码补充解释;不能用参考输出代替真实运行。
保存独立尝试后,阅读解法与状态轨迹
解法依据
先检查 n 与 k 的范围,非法立即返回 -1。设置 count=0;i 从 1 到 n(包含 n),当 i%k 为 0 才增加 count。循环结束返回 count。最多检查 100 个整数,函数中 n、k 的副本保持原值;没有借用局部对象的返回地址。
逐步推演
n=7,k=2:i=1 后 count=0;i=2 后 1;i=3 后 1;i=4 后 2;i=5 后 2;i=6 后 3;i=7 后仍为 3。每轮结束,count 恰好表示已经检查过的 [1,i] 中合格数。
FOLLOW THE ANSWER, NOT A SCRIPT
从回答进入下一层追问
从 n1 开始。先录下回答,再展开判定;达到条件就走深入分支,未达到就按反馈缩小问题。一次最多走一轮,不靠反复查看同一答案累积“通过”。
NODE n1
把循环条件写成 i<n,会在哪个最小合法输入出现错误?
NODE r1
把第一个追问缩到最小输入,重新逐步说明。
我已作答:查看判定与下一分支
需要解释清楚:n=1,k=1 应为 1,但 i<n 一次也不执行而返回 0。
NODE n2
为什么不能先算 i%k,最后再判断 k 是否有效?
NODE n3
如果改用 int& n 并在循环中递减 n,调用者会看到什么?
我已作答:查看判定与下一分支
需要解释清楚:引用会修改原对象;例如调用者 n=7 可能最终变成 0,与本接口不修改输入的约定冲突。
答案强在哪里,弱在哪里
保存自己的回答后,打开对照
弱答案
“写个 for,再 n/k 就行,0 应该也算一次。”
强答案
“合同只统计 1 到 n,所以 n=0 时区间为空。先拒绝 k=0,再从 1 到 n 检查余数;n=6,k=3 必须得到 2,这能抓住漏掉右端点的错误。”
强答案先解决区间和无效除数,再给出可反驳的边界例子。使用了熟悉的运算不代表回答了题目;本题训练的是一致的合同和循环。
在自己的原回答里划出一个缺失的条件或错误推理,再重说一遍。完整句子背熟,不代表能处理新约束。
ANSWER, THEN HANDLE AN INTERRUPTION
英文口述与打断
Explain the loop without reading your code.
- State the closed interval and invalid-input result.
- Trace n=6,k=3.
- Explain why validation comes before remainder.
The interviewer interrupts: “Why is zero not counted?”
录完第一轮后,读英文示范
I count multiples in the closed interval from one to n. I reject invalid inputs before using the remainder operator. For n equal to six and k equal to three, the loop counts three and six, so the result is two. The arguments are passed by value, so the caller’s inputs do not change.- 前 15 秒说明输入、输出和一个关键约定。
- 至少用一个本题的数值解释因果,不只罗列英文术语。
- 明确一个边界或尚未验证的限制;不能把教学推演说成项目经验。
次日关掉解答,换一个问题
次日实现 count_even_between(lo,hi),只接受 0≤lo≤hi≤20,统计闭区间偶数个数,其他输入返回 -1。使用普通循环,先写 [0,0]、[3,7]、[8,3] 的预期再运行。
独立重做后核对
[0,0]→1(0 是偶数);[3,7]→2(4、6);[8,3]→-1。还应检查 [20,20]→1 与 [-1,2]→-1。区间现在包含 0,与主问题的起点不同。
- 关闭主问题答案并使用新输入独立完成。
- 给出结果与原因;失败时记录最小反例,不能只把完成标记改成通过。
重做的 30min 已计入本套4h;需要更多补课时记录实际用时,按缺口顺延。
记录实际回答与证据
# W01 算法 / 英文训练记录(仅个人练习,不是能力认证)
日期:
本次先备与尚不确定点:
主问题接口合同:
我最初的方案与状态表:
运行命令或设计事件编号:
失败输入 / 预期 / 实际:
修复与理由:
追问路径(节点 → 自己原话 → 缺口):
英文第一轮两处含糊句:
英文第二轮修订:
次日重做日期(30 分钟已含本周预算):
重做输入 / 实际结果 / 解释:
仍需补练:
本次练习的检查依据
所有公开用例与自加边界一致;独立解释包含端点和先拒绝 k=0;英文能用一个数字例子说明循环。仍不替代 Day 1/G0 正式验收。
模板在你的个人笔记中填写。网页只提供空模板;不会把这次训练写成项目经验或学习验收结果。