显示杨辉三角图形
杨辉三角问题是一个很常见的数学题,下面我们用数组的方法显示杨辉三角图形。。
杨辉三角是(a+b)的n次幂的展开式系数,如:
(a+b) 系统数是1 1
(a+b)2展开后的系数是 1 2 1
(a+b)3展开后的系数是 1 3 3 1
从而我们得到杨辉三解的系数规律(指数为n):
1、共有n+1组系数,且第K组(从0)开始有K+1个数。
2、每组最后一位与第一位均为1
3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的前一行同一列与前一列之各。
解题思路:
首先我们用FOR循环给数组赋值:
#include<iostream>
main()
{
int i,j,a[10][10];
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%d ",a[i][j]);
printf("\n");
}
以上这段程序,我这样写,是能够看清内部输出的形式,可以运行一下,可以看到赋值后的效果
当然,前面的那给所有数组赋0没有必要,这只是一个测试过程。。让我们更好的理解实现杨辉三角显示的方法。
上面的程序,我们给杨辉三角的外围数都赋了值,也就是都赋了1,不管有多少层,杨辉三角的最两边的值都为1,所以我们给他们赋了1,
下面我们对其它的数组元素赋值。前面分析中我们发现杨辉三角的规律中的第三点:若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的前一行同一列与前一列之各。那么程序是这样的:
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
这样就可以为外围数据包围的数组元素赋值了,而且是按照上面的规律赋值。
赋完值就可以输出了。。。。。。。。。。。。下面是我边试边写的一个杨辉三角显示程序,总的目标是实现了,有点乱。。但意思表达清楚啦。
数组实现杨辉三角很简单哈。。
#include<iostream>
main()
{
int i,j,a[10][10];
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%d ",a[i][j]);
printf("\n");
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("\n");
for(i=0;i<10;i++)
{
for(j=0;j<i+1;j++)
printf("%d ",a[i][j]);
printf("\n");
}
for(i=0;i<10;i++)
{
for(j=0;j<(70-6*i)/2;j++)
printf("");
for(j=0;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
getchar();
getchar();
}
这段程序写得很乱,我们可以好好的写一个程序,首先可以输入一个数代替N幂,就是说要输出多少行的杨辉三角,然后把这个N代进程序里就可以随意输出多少行了。。
简单的东西就不多说了。。看完了,就会了的!