题目描述:斐波那契数列是类似这样的一个数列:1 1 2 3 5 8 ... 从第三个数起每个数字都是前面两个数之和。 现在规定一个由m列长度为n的斐波那契数列组成的n行m列斐波那契矩阵: 由输入给出前面两行的数字,然后从第三行起,每个数字由前两行中同一列的数字相加得到。 输入格式:第一行两个整数n和m。 第二、三行给出斐波那契矩阵的前两行数字。 输出格式:完整的n行m列斐波那契矩阵,同行数字间空格隔开。c++实现
时间: 2024-02-13 10:05:14 浏览: 94
以下是C++实现代码:
```cpp
#include <iostream>
using namespace std;
int fib(int n) {
if (n == 1 || n == 2) return 1;
return fib(n - 1) + fib(n - 2);
}
int main() {
int n, m;
cin >> n >> m;
int a[20][20];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i == 1) a[i][j] = fib(j);
else if (i == 2) a[i][j] = fib(j + 1);
else a[i][j] = a[i - 1][j] + a[i - 2][j];
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
解释:
1. 首先,我们通过 `cin` 输入矩阵的行数 `n` 和列数 `m`。
2. 然后,我们创建一个二维数组 `a`,用于存储斐波那契矩阵中的每个数字。
`int a[20][20]` 表示创建一个大小为 20*20 的二维数组。
3. 接下来,我们使用两重循环遍历矩阵中的所有数字,并且依次计算每个数字的值。
第一行和第二行的数字可以直接通过 `fib` 函数计算得到;
从第三行开始,每个数字都是前两行中同一列的数字相加得到。
4. 在循环中,我们将每个数字输出到控制台上,并在数字之间添加一个空格。
5. 最后,我们将所有数字输出完毕后,将当前行的所有数字换行,并结束程序。
阅读全文