题目描述
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行,每个数输出域宽为5。

代码

#include <iostream>
#include <iomanip>
using namespace std;

/*杨辉三角最终显示效果是一个等腰三角形,两个最外边都是1
  杨辉三角的根本在于,每个数等于它上方两数之和
*/
int main(){
  int n;//变量n在此处起到了限制输出行数的作用,可优化成用户输入
  cin>>n;
  int i,j,a[n][n];

  //使第一列和对角线元素的值为1
  for (i=0;i<n;i++){            //前两行全为1,拿出来单独处理
     a[i][i]=1;//使最右侧边全为1
     a[i][0]=1;//使最左侧边全为1
  }

  //从第三行开始处理
  for (i=2;i<n;i++)                //三行开始出现变化
    for (j=1;j<=i-1;j++) //j始终慢i一步
       a[i][j]=a[i-1][j-1]+a[i-1][j];//每个数等于它上方两数之和,如a32=a21+a22

  //输出数组各元素的值
  for (i=0;i<n;i++){            //从第一行开始
     for (j=0;j<=i;j++)            //利用j将每一行的数据全部输出
       cout<<setw(5)<<a[i][j];    //在C++中,setw(int n)用来控制输出间隔,这里是指前元素末尾与后元素末尾之间有个5空格位
     cout<<endl;
  }
  //cout<<endl;
  return 0;
}