前言:
21考研,正在啃《算法笔记》,不论能否进复试记录一下准备路上写下的垃圾代码。
解答:
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > vi;
void create_graph(int m) {
if (m == 1)
vi[0].push_back(0);
else if (m == 2) {
vi[0].push_back(0);
vi[1].push_back(0);
vi[1].push_back(1);
vi[1].push_back(1);
}
else {
create_graph(m - 1); //构建m-1阶数列
//构建m阶数列
for (int i = 0; i < vi[m - 2].size(); i++) //对于第m行,先照抄前一行
vi[m - 1].push_back(vi[m - 2][i]);
//再插入最后两项
vi[m - 1].push_back(vi[m - 1][vi[m - 1].size() - 2] + vi[m - 1][vi[m - 1].size() - 1]);
vi[m - 1].push_back(vi[m - 1][vi[m - 1].size() - 2] + vi[m - 1][vi[m - 1].size() - 1]);
}
}
int main() {
int n;
cin >> n;
while (n--) {
int m;
cin >> m;
vector<int> temp;
for (int i = 0; i < m; i++)
vi.push_back(temp);
create_graph(m);
for (int i = 0; i < m; i++) { //按格式输出
for (int k = 0; k < (m - i - 1) * 2; k++)
printf(" ");
for (int j = 0; j < vi[i].size(); j++) {
printf("%d ", vi[i][j]);
}
printf("\n");
}
vi.clear();
}
return 0;
}