GESP 八级 · GESP 202403 C++ 八级 第 22 题

判断题 · 答案 A

← 整套速查表 GESP 八级 全部真题

题目

已知 int 类型的变量 a、b 和 c 中分别存储着一个三角形的三条边长,则这个三角形的面积可以通过表达式 sqrt((a + b + c) * (b + c - a) * (a + c - b) * (a + b - c)) / 4 求得。

答案:A

解题思维

图的存储方式:邻接矩阵(O(n²)空间,适合稠密图)、邻接表(O(n+m)空间,适合稀疏图)。

常见错误

有向完全图边数为n(n-1),无向完全图边数为n(n-1)/2。简单图不含自环和重边。

详细解析(节选)

【考点】海伦公式|浮点运算|表达式求值

1. 考纲定位:GESP八级C++模块,命题人把这道题放在这里,是卡住大多数考生对海伦公式的机械记忆——他们背过公式,却忘了公式里是开平方再除以4,不是除以2。

2. 解题思维:看到sqrt和四个括号相乘,立刻应想到海伦公式:半周长p=(a+b+c)/2,面积=√[p(p−a)(p−b)(p−c)]。把p代入,√[(a+b+c)/2·(b+c−a)/2·(a+c−b)/2·(a+b−c)/2] = √[(a+b+c)(b+c−a)(a+c−b)(a+b−c)]/4,与题面完全一致。通法:遇到三角形面积求法,先写半周长,再套用海伦公式,展开即可。

3. 陷阱拆解:选B的考生通常犯了两个错误。一是把分母4误记成2,因为半周长里每个因子都有除以2,四个因子相乘后分母是2^4=16,开方后分母变成4,他们却只看到"除以2"就停住。二是忽略浮点运算细节——题面里a,b,c是int,但sqrt返回double,除法也是浮点除法,不会整除截断。命题人把这两个坑叠在一起,就是让只背结论、不看推导的人必错。

4. 反命题思维:如果把题面改成"用整数运算求面积",答案就会变错;如果把分母4换成2,答案也会变错。刷到这类题先问自己:命题人想考我的是海伦公式的变形,还是浮点运算的隐式转换?

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断