第一个版本:用二维数组
优点:
简单明了,只要弄清楚每个变量位置的值是由哪个位置的值相加得来的,即可写出
缺点:
一半的数组空间没有利用到,浪费了
//二维数组版本会导致一半的空间被浪费,只用到了半边数组 #includeusing namespace std; int main() { int a[500][500] = {1}; int n; cout << "Please input the n: "; cin >> n; for (int i = 1; i <= n; ++i)//从0开始的话,第二层循环相当于没做事 { for (int j = 0; j < i; ++j) { a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; } } for (int i = 1; i <= n; ++i) { for (int j = 0; j < i; ++j) { cout << a[i][j] << " "; } cout << endl; } return 0; }
改进:
1.使用一维数组使得每次操作仅在一行中实现,还是需要一定的空间
2.不用数组,根据公式边计算边输出,省下很多空间,但是需要理解计算公式
我直接跳过一维数组这个优化过程,写不用数组的版本
#includeusing namespace std; int main() { int n; int sum = 1; cout << "Please input the n: "; cin >> n; for (int i = 1; i <= n; ++i) { sum = 1; for (int j = 1; j <= i; ++j) { if (j > 1) sum = sum * (i - j + 1)/(j - 1); cout << sum << " "; } cout << endl; } return 0; }
用i,j分别表示当前的行列数,因为杨辉三角上的数是可以通过组合数公式计算出来的,而且跟当前的行列数有关联,所以直接套用公式:sum = sum * (i - j + 1)/(j - 1)



