小杨正在爬楼梯,需要 $n$ 阶才能到达楼顶,每次可以爬 $1$ 阶或 $2$ 阶,求小杨有多少种不同的方法可以爬到楼顶,横线上应填写( )。
int climbStairs(int n) {
if (n <= 2) return n;
int prev2 = 1;
int prev1 = 2;
int current = 0;
for (int i = 3; i <= n; ++i) {
________________ // 在此处填入代码
}
return current;
}A.
prev2 = prev1;
prev1 = current;
current = prev1 + prev2;B.
current = prev1 + prev2;
prev2 = prev1;
prev1 = current;C.
current = prev1 + prev2;
prev1 = current;
prev2 = prev1;D.
prev1 = current;
prev2 = prev1;
current = prev1 + prev2;答案B。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。
排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。
【考点】动态规划|斐波那契数列|变量状态更新顺序
B
GESP C++四级「算法设计」模块的动态规划核心题型。命题人专卡状态转移与变量更新顺序的混淆点——绝大多数考生知道公式但对prev2该等于谁理解不清,导致循环里写错更新次序。