问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
要求:给出n,输出它的前n行。
输入格式:输入包含一个数n。
输出格式:输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
算法思路:
new一个新的二维数组**arr并申请空间:
//动态开辟空间
int **arr = new int*[n]; //开辟行
for(int i = 0; i < n; i++)
arr[i] = new int[i]; //开辟列,用不到n个,只需在i行开辟i个即可
考虑会出现的情况:1、杨辉三角的第i行的第0个和第i-1应当是1;
2、其余元素均为其肩上的两个数之和
C++代码实现:
#include<iostream>
using namespace std;
void yanghui(int n){
int **arr = new int*[n];
for(int i = 0; i < n; i++){
arr[i] = new int[i];
}
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
if(j == 0||j == i){
arr[i][j] = 1;
}
else
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
yanghui(n);
}