题目1073:杨辉三角形

时间限制: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
来源:
2002年清华大学计算机研究生机试真题(第I套)

递归解法

#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;
}

 

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/ye_shizhe/article/details/8632250
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞