题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
输入n值,使用递归函数,求杨辉三角形中各个位置上的值。
输入描述:
一个大于等于2的整型数n
输出描述:
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。
示例
输入:
cpp
6
输出:
cpp
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
思路:
杨辉三角第一行和第二行的内容很明显,从第三行开始就很有规律了:每一行的第一个和最后一个元素都是1,从第二个到倒数第二个元素都是上一行的两个相邻元素的和。 这里可以简单的分为奇数行和偶数行,只需要**用两个一维数组就可以,保存相邻的两行元素,不断迭代更新它们的内容,并及时输出。**虽然用一个二维数组来保存每一行的数值会简单许多,但是题目输入的是一个大于等于2的整数n,当n很大时,如果用一个二维数组来保存每一行的数值会占用较大的空间。
注意:根据题目的示例输出,这里并不需要输出杨辉三角第一行的数值1。
源代码:
cpp
#include<iostream>
#include<vector>
using namespace std;
//习题8.1 杨辉三角形
int main()
{
int n;
vector<int> nums1 = { 1 };
vector<int> nums2 = { 1,1 };
while (cin >> n) {
for (int i = 2; i <= n; i++) {
if (i % 2 == 1) { //奇数行
nums1.resize(1);
for (int j = 1; j < i - 1; j++) {
nums1.push_back(nums2[j - 1] + nums2[j]);
}
nums1.push_back(1);
for (auto it : nums1) {
cout << it << " ";
}
cout << endl;
}
else { //偶数行
nums2.resize(1);
for (int j = 1; j < i - 1; j++) {
nums2.push_back(nums1[j - 1] + nums1[j]);
}
nums2.push_back(1);
for (auto it : nums2) {
cout << it << " ";
}
cout << endl;
}
}
}
return 0;
}