🧩 第 7 题:两点之间的“最短直线”(数学 + C++ 陷阱题)
1、📖 故事背景
(1)在坐标王国🗺️,
有两个小精灵站在平面上的两个点:
点 A:(x1, y1) 点 B:(x2, y2)(2)国王问:
👑“它们之间的直线距离是多少?”
(3)🧠 数学公式(你一定见过!)
(4)🧠 但!这是 C++ 编程考试
👉不是写公式就完了
👉 要写“对的 C++ 表达式”
2、🧩 四个选项逐个看(重点!)
(1)❌ A 选项
sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)🚨大坑!
^在 C++ 里不是平方它是:按位异或
📌 所以这是完全错误的
(2) ❌ C 选项
pow(x1 - x2, 2) + pow(y1 - y2, 2)❌ 少了什么?
👉少了 sqrt(开平方)
这是“平方和”,不是“距离”
(3)❌ D 选项
abs(x1 - x2) + abs(y1 - y2)这是:
曼哈顿距离 🚕
不是直线距离
(4)✅ B 选项(唯一正确)
sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))✔️ 和数学公式一模一样
✔️ 用了pow
✔️ 用了sqrt
✅ 正确答案
👉B
3、🌟记忆口诀
❗ C++ 中
^不是平方✔️ 平方要用
pow✔️ 求平方根要用
sqrt
🧩 第 8 题:变量“影分身之术”(引用 & 的本质)
1、📖 故事背景
(1)在变量王国👑,
有一个士兵:
int a = 10;后来,魔法师施展了一个法术:
int &b = a;🪄 b 成了 a 的“影分身”
然后执行:
b = 20;(2)国王问:
👑那 a 现在是多少?
2、🧠 引用(&)到底是什么?
(1)🔑 一句话理解:
引用 = 变量的“别名”
就像:
本名:a
小名:b
但他们是同一个人
(2)🧠 内存里的真实情况
内存地址:0x100 里面的值:10 名字:a、b(两个名字)当你写:
b = 20;等价于:
a = 20;3、✅ 正确答案
👉B. 20
4、❌ 其他选项为什么错?
A:10 ❌(那是没理解引用)
C:30 ❌(凭空加的)
D:编译错误 ❌(完全合法)
5、🌟记忆口诀
✔️ 引用不是复制
✔️ 引用不会新开空间
✔️ 引用后,改 b 就是改 a
🧩 第 9 题:程序跑得快不快?(时间复杂度)
1、📖 故事背景
在算法跑步大赛🏃♂️ 中:
有些程序跑得像 🚀 火箭
有些像 🐢 乌龟
裁判不关心具体跑几秒,只关心:
❓当 n 变得很大时,它慢不慢?
2、🧠 这题考的是什么?
👉时间复杂度
3、🧠 时间复杂度是啥?
📌“n 变大,循环跑几次?”
我们只关心:
有几层循环
跑的次数与n有啥关系
4、🧠 常见时间复杂度对照表
| 写法 | 复杂度 |
|---|---|
| 一层 for | O(n) |
| 两层 for | O(n²) |
| 三层 for | O(n³) |
| 每次减半 | O(log n) |
5、🧠 本题的核心判断方法
(1)👀 看程序结构(不看细节)
1️⃣ 有没有循环?
2️⃣ 几层循环?
3️⃣ 内层循环跑几次?
(2)👉 本题结构
1️⃣ 第一重循环
for (int i = 1; i <= n; i++)时间复杂度O(n)
2️⃣ 第二重循环
for (int j = 1; j * j <= i; j++)时间复杂度O(sqrt(n))
3️⃣🧠 结论
这段代码最终的时间复杂度是:
O(n) * O(sqrt(n)) = O(n * sqrt(n) )
6、✅ 正确答案
👉C
7、🌟 记忆口诀
✔️ 时间复杂度 ≠ 运行时间
✔️ 要忽略常数、只看最大项
✔️ 首先看“循环层数”
✔️ 然后看“循环次数”