时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1249
解决:531
- 题目描述:
输入n值,使用递归函数,求杨辉三角形中各个位置上的值。
- 输入:
一个大于等于2的整型数n
- 输出:
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。
- 样例输入:
6
- 样例输出:
1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
递归解法
#include<iostream>
#include<vector>
using namespace std;
vector<int> getYang(int n){
vector<int> atN;
if(n == 1){
atN.push_back(1);
atN.push_back(1);
}
else{
vector<int> preLevel = getYang(n-1);
for(int i = 0; i < preLevel.size();i++){
cout<<preLevel[i];
if(i != preLevel.size()-1) cout<<" ";
else cout<<endl;
}
atN.push_back(1);
int p1 = 0,p2 = 1;
while(n-- > 1){
atN.push_back(preLevel[p1] + preLevel[p2]);
p1++; p2++;
}
atN.push_back(1);
}
return atN;
}
int main(){
int n;
while(cin>>n) getYang(n);
return 0;
}
非递归解法
#include<vector>
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
vector<int> va,vb;
va.push_back(1);
va.push_back(1);
vb.push_back(1);
vector<int> *vSource = &vb,*vPrint = &va,*tmp = NULL;
while(--n >0){
for(int i =0; i<vPrint->size(); i++){
cout<<(*vPrint)[i];
if(i != vPrint->size() -1) cout<<" ";
else cout<<endl;
}
tmp = vPrint;
vPrint = vSource;
vSource = tmp;
int p1=0,p2=1;
while(p2 < vSource->size()){
int value = (*vSource)[p1] + (*vSource)[p2];
if(p2 < vPrint->size()) (*vPrint)[p2] = value;
else vPrint->push_back(value);
p1++;
p2++;
}
vPrint->push_back(1);
}
}
return 0;
}