到这个时候才感叹二项式定理的重要性(';ω;`)... 杨辉三角就是二项式系数的一种排列,每行的数都可用二项式系数公式计算得出。
第n行的数为:
那么这题主要就在于写出一个可用的组合数函数了。
我根据组合数公式简化的组合数函数算法是这样的: 先判断m和n-m哪个更大,从更大的那个数开始依次相乘乘到n,得到“分子”; 再从1乘到上面更小的那个数,得到“分母”; 输出“分子”/“分母”即可。 要注意数学中将0!的值规定为1,在程序中要单独指出。以及组合数函数的返回值类型
#include<iostream>
using namespace std;
long long c(int m, int n)//组合数函数
{
if (m == 0)
return 1;
long long res1 = 1, res2 = 1;
if (m <= n - m)
{
for (int i = n - m + 1; i <= n; i++)
res2 *= i;
for (int i = 1; i <= m; i++)
res1 *= i;
}
else
{
for (int i = m + 1; i <= n; i++)
res2 *= i;
for (int i = 1; i <= n - m; i++)
res1 *= i;
}
return res2 / res1;
}
int main()
{
int n;
while(cin >> n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
if (j != 0)
cout << " ";
cout << c(j, i);
}
cout << endl;
}
cout << endl;
}
return 0;
}