魔鬼共有n级楼梯要走,魔鬼有他的步伐,每一步他只可以向上走a级楼梯或者b级楼梯,请问走到第n级台阶至少要几步?走不到时输出-1。c++ dfs 不许用vector
时间: 2024-06-15 21:04:17 浏览: 101
要计算走到第n级台阶至少需要几步,可以使用深度优先搜索(DFS)算法来解决。以下是使用C++实现的代码:
```cpp
#include <iostream>
int minSteps(int n, int a, int b) {
if (n == 0) {
return 0;
}
if (n < a && n < b) {
return -1;
}
int minA = INT_MAX, minB = INT_MAX;
if (n >= a) {
minA = minSteps(n - a, a, b);
}
if (n >= b) {
minB = minSteps(n - b, a, b);
}
if (minA == -1 && minB == -1) {
return -1;
}
return 1 + std::min(minA, minB);
}
int main() {
int n, a, b;
std::cout << "请输入楼梯总级数n:";
std::cin >> n;
std::cout << "请输入魔鬼的步伐a和b:";
std::cin >> a >> b;
int steps = minSteps(n, a, b);
std::cout << "走到第" << n << "级台阶至少需要" << steps << "步" << std::endl;
return 0;
}
```
这段代码中,`minSteps`函数使用递归的方式计算走到第n级台阶至少需要的步数。首先判断特殊情况,如果n为0,则不需要走步数为0;如果n小于a和b,则无法走到第n级台阶,返回-1。然后,分别计算走到第n级台阶时,选择走a级台阶和走b级台阶的情况下所需的最小步数。最后返回较小的步数加1。
阅读全文