思路分析:
杨辉三角,是二项式系数在三角形中的一种几何排列。与杨辉三角联系最紧密的是二项式乘方展开式的系数规律,即二项式定理。例如在杨辉三角中,第3行的三个数恰好对应着两数和的平方的展开式的每一项的系数,第4行的四个数恰好依次对应两数和的立方的展开式的每一项的系数,依次类推。
我们将组合数的“上标”表示为变量 n ,将“下标”表示为变量 m 。用两个 for 循环,外循环控制 m 的值,使 m 每次加一,直到输出到想要输出的行数( m 的值加一就是行数)。内循环控制 n 的值,使 n 每次加一,直到 n=m 。每次退出内循环后,控制换行。
由组合数的一个数学公式:
再算出 m、(m-n)、n 的阶乘,分别赋给 s1、s2、s3,就可以表示这个组合数了,组合数的“上标”和“下标”恰好和二维数组元素的下标对应,每次算出一个组合数,就可以存储到一个二维数组的一个元素去。
代码实现:
#include <stdio.h>
int main()
{
int m, n, i, s1 = 1, s2 = 1, s3 = 1, a[10][10];
printf("%d\n", 1);//第一行的数字1就先打印出来吧 :-)
for (m = 1; m <= 9; m++)//输出10行
{
for (n = 0; n <= m; n++)
{
s1 = 1, s2 = 1, s3 = 1;//不要忘记重置它们的值!!!
//求m的阶乘
for (i = 1; i <= m; i++)
{
s1 = s1 * i;
}
//求(m-n)的阶乘
for (i = 1; i <= m - n; i++)
{
s2 = s2 * i;
}
//求n的阶乘
for (i = 1; i <= n; i++)
{
s3 = s3 * i;
}
a[m][n] = s1 / (s2 * s3);//容易写成s1/s2*s3,这是错误的
}
}
//开始打印杨辉三角
for (m = 1; m <= 9; m++)
{
for (n = 0; n <= m; n++)
{
printf("%d ", a[m][n]);
}
printf("\n");//每次退出内循环后,即打印完杨辉三角的一行后,换行
}
return 0;
}