前言:
21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。
题目描述:
输入n值,使用递归函数,求杨辉三角形中各个位置上的值。
输入描述
一个大于等于2的整型数n
输出描述:
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。
解答
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > vi; //构建好整个三角形再输出
vector<int> temp;
void f(int n) {
vi.push_back(temp);
if (n == 2) {
vi[0].push_back(1);
vi[0].push_back(1);
}
else {
f(n - 1); //构建n-1阶三角形
vi[n - 2].push_back(1);
for (int i = 0; i < n - 2; i++) //根据n-1行计算第n行
vi[n - 2].push_back(vi[n - 3][i] + vi[n - 3][i + 1]);
vi[n - 2].push_back(1);
}
}
int main() {
int n;
while (cin >> n) {
f(n);
for (int i = 0; i < vi.size(); i++) {
for (int j = 0; j < vi[i].size(); j++)
printf("%d ", vi[i][j]);
printf("\n");
}
vi.clear();
}
return 0;
}
样例有误导,第一行的1并不输出,不过稍微改改就行。