GESP2026年6月认证C++七级( 第一部分选择题(1-7))精讲
第1题 数学函数1、题目代码#include iostream #include cmath using namespace std; int main() { cout (int)(sqrt(50) log2(8)); return 0; }A.9B.10C.11D.12答案B2、第一步先算 sqrt(50)sqrt(x)表示平方根。即7.0710678...注意sqrt返回的是double类型。不是整数。3、第二步计算 log2(8)log2(x)表示以2为底的对数因为2^38所以log2(8)3也是一个double3.04、第三步相加7.0710678 3.0 10.07106785、第四步强制类型转换代码最后有(int)即(int)10.0710678变成10这里不会四舍五入而是直接舍弃小数部分向0截断。所以输出10答案✅ B6、本题知识点需要掌握① sqrt()sqrt(49)7 sqrt(2)1.414...返回double② log2()例如log2(2)1 log2(4)2 log2(8)3 log2(16)4③ 强制类型转换(int)10.99结果10不是11。有的同学这里容易错。第2题 cmath函数1、题目问下面哪个说法正确答案A、sqrt(49)的返回值可以参与浮点运算。2、看四个选项1选项Asqrt(49)返回7.0类型是double当然可以继续参与浮点运算。例如double xsqrt(49)0.5;得到7.5所以A正确。2选项 Blog2(32)结果虽然是5但是类型不是int。而是double这一点一定牢记。所以B选项错误。❌️3选项 Cpow(2,5)结果虽然等于32但是返回值类型依旧是double不是int。例如couttypeid(pow(2,5)).name();会发现不是int。所以C选项错误❌️。4选项 D很多同学最容易掉坑。sin(90)里面的90不是90°。数学库规定三角函数全部使用弧度。即sin(π/2)1如果写sin(90)其实表示90弧度不是90度。因此D选项错误❌️。3、本题总结函数返回类型sqrtdoublepowdoublesindoublecosdoublelogdoublelog2double以及三角函数使用弧度。第3题 参数传递1、答案C、引用形参绑定到实参后在函数内修改引用形参通常会影响实参。2、看四个选项1A选项形参与实参一定使用同一块内存错误。普通参数void f(int x)调用int a5; f(a);这里a和x不是同一块内存。而是a ↓ 复制 ↓ x所以A错误。2B选项值传递例如void add(int x){ x; }调用int a5; add(a);结束以后a仍然是5因为修改的是复制品。所以B错误。3C选项引用void add(int x){ x; }调用int a5; add(a);实际上x就是a修改x就是修改a最终a6所以C正确。4D选项指针当然可以修改。例如void add(int *p){ (*p); }调用int a5; add(a);结果a6因此D错误。3、三种参数总结方式能否修改实参值传递不能引用能指针能考试经常考。第4题 哈夫曼树1、答案D、692、这一题考的是哈夫曼树Huffman Tree1核心原则只有一句每次取最小的两个合并。2例如1 2 3 4 53先合并123得到3 3 4 54再继续336不断重复。5最后所有合并值加起来就是WPL在考试中不要求现场画树但一定要会按照优先队列小根堆不断合并最小权值计算 WPL。试卷给出的这一组数据按上述规则计算最终得到D。3、哈夫曼口诀考试记一句每次找最小两个加起来放回去。所有合并值之和就是WPL第5题 DP1、答案C、dp[i][j] a[i][j] max(dp[i - 1][j], dp[i][j - 1])2、题目说只能向右或者向下走。3、假设来到这里□ □ □ □ □ X来到X只有两种可能。1一种上面 ↓ X2另一种左边 → X3因此上一状态只有两个dp[i-1][j] dp[i][j-1]4题目要求最大数字和所以应该取max再加上当前格子的值4、状态转移公式dp[i][j] a[i][j] max(dp[i-1][j],dp[i][j-1]);答案是C。5、为什么其它错1A选项用了min这是最小路径。不是最大。2B选项根本没有加当前格子。错误。3D选项来自左上角。但题目不能斜着走。错误。6、经典模板以后看到向右 向下基本都是dp[i][j] max(上,左) 当前值或者min(上,左) 当前值根据题意改。第6题 动态规划答案C、121、题目分析1状态转移f[i] max(f[i-1],f[i-2]a[i]);是不是很眼熟2这就是打家劫舍House Robber经典DP。意思到了第i个位置。有两个选择。① 不偷f[i-1]② 偷f[i-2]a[i]因为相邻不能同时选。2、现在模拟计算。1初始f00 f122数组2 7 9 3 13计算i2max(2,07) 7i3max(7,29) 11i4max(11,73) 11i5max(11,111) 124因此f512对应答案C。3、记忆口诀每次只有两种情况不要当前 要当前所以max ( 前一个, 前两个当前 )第7题 01背包答案D、dp[c] max(dp[c], dp[c - w[i]] v[i])1、先看代码for(int i1;in;i) { for(int cW;cw[i];c--) { ________ } }这里是一维优化01背包2、核心公式必须牢记dp[c] max( dp[c], dp[c-w[i]]v[i] );因此答案D。3、为什么容量要倒着循环1因为01背包 每件只能拿一次。2如果正着循环dp[5] 更新以后 马上 dp[6] 又用了新的dp[5]就等于同一件物品用了两次。变成完全背包。3所以必须W ↓ w[i]倒着更新。4、必须牢记的公式优化后for(int cW;cw;c--) dp[c]max(dp[c],dp[c-w]v);这是GESP经常考的01背包模板。第一部分 17题知识点总结题号知识点必须掌握1sqrt、log2、强制类型转换理解double与(int)截断2cmath数学函数所有数学函数大多返回double三角函数使用弧度3函数参数传递值传递、引用传递、指针传递的区别4哈夫曼树每次合并最小两个结点计算最小 WPL5二维 DP网格路径最大值状态转移6线性 DP经典“打家劫舍”状态转移701 背包一维优化公式与倒序枚举容量的原因这 7 道题覆盖了七级考试中最核心的基础算法知识尤其是动态规划第5、6、7题几乎每次 GESP 七级都会涉及建议重点掌握。

相关新闻