用C++编写“输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= n<= 50,最后一行为0,表示测试结束,输出:不同的走法数,每一行输入对应一行输出”
时间: 2023-06-15 21:07:34 浏览: 58
以下是用C++编写的程序:
```c++
#include <iostream>
using namespace std;
int dp[55]; // dp数组,记录走到每个台阶的走法数
int main() {
int n;
dp[0] = dp[1] = 1; // 初始化dp数组
for (int i = 2; i <= 50; i++) {
dp[i] = dp[i-1] + dp[i-2]; // 状态转移方程
}
while (cin >> n && n) {
cout << dp[n] << endl; // 输出不同的走法数
}
return 0;
}
```
程序中使用了动态规划的思想,dp数组记录了走到每个台阶的不同走法数,其中dp[0] = dp[1] = 1是初始状态,表示走0或1个台阶的走法数都是1。接下来用循环计算dp数组的值,状态转移方程为dp[i] = dp[i-1] + dp[i-2],表示走到第i个台阶的不同走法数等于走到第i-1个和第i-2个台阶的走法数之和。最后通过循环读入每个测试数据,输出对应的不同走法数即可。
相关问题
用C++编写“输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= n<= 50,最后一行为0,表示测试结束”
以下是用 C++ 编写的程序,可以实现输入包含若干行,每行包含一个正整数 N,代表楼梯级数,1 <= n <= 50,最后一行为 0,表示测试结束。程序采用了循环结构和条件判断语句。
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
while (true) {
cin >> n;
if (n == 0) {
break;
}
// 在这里可以对 n 进行处理
cout << "楼梯级数为:" << n << endl;
}
return 0;
}
```
在这个程序中,我们用一个 while 循环来不断地读取输入,直到输入的数字为 0,程序才会退出循环。在循环中,我们可以对输入的数字进行处理,这里只是简单地将其输出。
给你一个整数n,输出n*n的蛇形矩阵。 输入- -行,包含一个整数n 输出n行,每行包含n个正整数,通过空格分隔。1<=n<=1000 用c++代码怎么写用到了什么算法知识
你可以使用以下的C++代码来生成蛇形矩阵:
```cpp
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> generateSnakeMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n));
int num = 1;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
for (int j = 0; j < n; j++) {
matrix[i][j] = num++;
}
} else {
for (int j = n - 1; j >= 0; j--) {
matrix[i][j] = num++;
}
}
}
return matrix;
}
int main() {
int n;
cin >> n;
vector<vector<int>> result = generateSnakeMatrix(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
这段代码中,`generateSnakeMatrix` 函数生成了一个大小为 n * n 的蛇形矩阵。在主函数中,首先读取输入的整数 n,然后调用 `generateSnakeMatrix` 函数生成蛇形矩阵,并将结果输出。
算法思路是通过两个嵌套的循环来填充矩阵,其中奇数行从左到右填充,偶数行从右到左填充。每次填充一个数,然后递增 num 变量,直到填充完所有的数。
希望对你有帮助!如有疑问,请继续提问。