最简单的杨辉三角计算以及规律统计
#include<stdio.h>
#define N 30
void CanculateYH(int a[][N], int n);
void PrintfYH(int a[][N], int n);
int main(viod)
{
int a[N][N] = { 0 };
int n;
printf("Input n:");
scanf("%d", &n);
CanculateYH(a, n);
PrintfYH(a, n);
return 0;
}
void CanculateYH(int a[][N], int n) //计算杨辉三角
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (i == j || j == 0) //判断第一列和对角线
{
a[i][j] = 1; //第一列和对角线赋值1
}
else
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; //等于两肩数字 杨辉三角核心
}
}
}
}
void PrintfYH(int a[][N], int n) //打印杨辉三角
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
该杨辉三角输出使用了模块化程序设计,使用两个函数来处理计算和打印,更加规范和安全。
另外我们可知杨辉三角副对角线相加可以得到斐波那契数列,如何验证也放在后面:
#include<stdio.h>
#define N 30
void CanculateYH(int a[][N], int n);
void PrintfYH(int a[][N], int n);
void CanculateFib(int a[][N], int f[N], int n);
int main(viod)
{
int a[N][N] = { 0 };
int f[N];
int n;
printf("Input n:");
scanf("%d", &n);
CanculateYH(a, n);
PrintfYH(a, n);
CanculateFib(a, f, n);
return 0;
}
void CanculateYH(int a[][N], int n) //计算杨辉三角
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (i == j || j == 0) //判断第一列和对角线
{
a[i][j] = 1; //第一列和对角线赋值1
}
else
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; //等于两肩数字 杨辉三角核心
}
}
}
}
void PrintfYH(int a[][N], int n) //打印杨辉三角
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
void CanculateFib(int a[][N], int f[N], int n) //测试副对角线方向相加是否等于斐波那契数列
{
int i, j, k;
for (i = 0; i < n; i++)
{
f[i] = 0; //将每个副对角线的值存到数列f中
for (j = i, k = 0; j >= k; j--, k++) //每个副对角线的计算方法
{
f[i] += a[j][k];
}
printf("%4d", f[i]);
}
}
在计算斐波那契后在三角的最后一行多加了一行用来打印数值,以此直观看出是否等于斐波那契数列。