杨辉三角: 每行端点与结尾的数为1. 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 第n行的第m个数和第n-m+1个数相等
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即
C(n+1,i)=C(n,i)+C(n,i-1)。 (a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。
拟实现:
实现给出一个n,则输出相对应的n的图形,包含n.
思路:
每行第一个数为1.
从第二列开始,当下标<n时每一个数=该数上面的数+该数上面数的前一个数,即:a[ i ][ j ]=a[ i-1 ][ j ]+a[ i-1 ][ j-1 ]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j,n;
int a[100][100] = { 0 };
printf("请输入n为:\n");
scanf("%d", &n);
for (i = 0; i < n; ++i)
{
a[i][0] = 1; //每一行第一列数均为一
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; //从每一行第二个数开始循环,每一个数=该数上面的数+该数上面数的前一个数
}
}
for (i = 0; i <= n; i++)
{
for (j = 0; j <= i; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}
运行结果: