//by YewLi
#include <iostream>
using namespace std;
void YangHuiData(int *, int);
void YangHuiShow(int *, int);
int main() {
int n;
cout<<"请输入杨辉三角形的行数"<<endl;
cin>>n;
//计算杨辉三角并保存到二维数组
//cout<<endl;
int a[n][n];
int *p;
p = a[0];
YangHuiData(p,n); //在屏幕上打印等腰三角形的杨辉三角
YangHuiShow(p,n);//n是杨辉三角形的行数
return 0;
}
void YangHuiData(int *p,int n){
//完成杨辉三角形的计算,没有显示的位置填0
//p[1][1] = p[1][2] = p[2][2] = 1;
//memset(p,0,sizeof(int));
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
p[i*n + j] = 0;
for(int i = 0;i < n;i++){
p[i*n] = p[i*n + i] = 1;
for(int j = 1;j < i;j++)
p[i*n + j] = p[(i - 1)*n + j - 1] + p[(i - 1)*n + j];
}
// for(int i = 0;i < n;i++){
// for(int j = 0;j < n;j++)
// cout<<p[i*n+j]<<" ";
// cout<<endl;
// }
// for(int i = 0;i < n;i++){
// for(int j = 0;j <= (n - i);j++)
// cout<<" ";
// for(int j = 0;j <= i;j++)
// cout<<p[i*n +j]<<" ";
// for(int j = 0;j <= (n - i);j++)
// cout<<" ";
// cout<<endl;
// }
}
void YangHuiShow(int *a,int n){
//根据数据a指向的二维数组在屏幕上打印
//杨辉三角形,每行前面填充合适的空格
//以显示成等腰三角形,左右对称
// cout<<"1111"<<endl;
for(int i = 0;i < n;i++){
for(int j = 0;j <= (n - i);j++)
cout<<" ";
for(int j = 0;j <= i;j++)
cout<<a[i*n +j]<<" ";
for(int j = 0;j <= (n - i);j++)
cout<<" ";
cout<<endl;
}
}
手动对齐,目前还没找到cpp输出的居中功能,叹气。
到9以后可能就不太齐了,真 强迫症可以用条件判断再对的齐一点。
然而我懒。
算是留了个不太好的小坑吧。