下面是杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
其特点是两个边界都是1,其余的中间的数,每一个数都是其肩膀上两个数的和,
其中杨辉三角和二项式定理有着直接的关系,当(a+b)^n中n的取值分别为0,1,2,3
其各项的系数分别对应杨辉三角的第1,2,3,4行,
即是n取一个固定值(作行数),然后变换r的值进行计算,输出
通过查阅资料得到:
二项式展开式公式为:
在杨辉三角中,令上面公式中的n为n-1,令r为k-1,得出的值为杨辉三角中第n行第k个数的值,也就是
Ck-1n-1 = (n-1)!/((k-1)!*(n-k)!)。为了输出美观,我们要在每行的左边打印空格,假设我们要打印杨辉三角的前num行,如果最后一行,
也就是最长的一行前不打印空格,则第n行前的空格个数为num-n个。
代码片段
#include<iostream>
//求阶乘的函数
int factorial(int num)
{
if (num == 0)
return 1;
else
{
int result = 1;
for (int i = 1; i <= num; ++i)
result *= i;
return result;
}
}
//打印杨辉三角的函数
void function(int rowNum)
{
int value;
for (int n = 1; n <= rowNum; ++n) //对于每一行
{
for (int i = 0; i <= rowNum - n; ++i) //打印每行前的空格
std::cout << " ";
for (int k = 1; k <= n; ++k) //打印每行的每个数
{
value = factorial(n - 1) / (factorial(k - 1)*factorial(n - k));
std::cout << value << " ";
}
std::cout << std::endl;
}
}
int main()
{
int lineNum;
std::cout << "请输入要打印的行数:" << std::endl;
std::cin >> lineNum;
function(lineNum);
system("pause");
return 0;
}
本人参考博客园,博主yibo,写的文章。