杨辉三角的几种解决方法(c语言)
以下为直角三角形图案样式
1.二维数组法(前提是您对二维数组或者是杨辉三角有一定的了解)
#include <stdio.h>
int main()
{
int a[100][100];//定义一个二维数组,用以储存数据
int i,j;//i定义为行,j定义为列
int n;
scanf("%d",&n);//输入层数
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0 || i==j)//在第一列或者在对角线上
{
a[i][j]=1;//每一行的两端,即开头均为1
}
else
{
/*此步可通过数字图形找到规律,也是杨辉三角的一条基本性质*/
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");
}
}
2递归(一些较大数据的运行时间远远多于其他方法)
#include <stdio.h>
int f(int x,int y)
{
if(y==0||x==y) return 1;//x代表行,y代表列
else
{
return(f(x-1,y-1)+f(x-1,y));
}
}
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",f(i,j));
}
putchar('\n');
}
return 0;
}
3阶乘法(基于杨辉三角的性质,即组合数问题)
#include <stdio.h>
#define ll float//ll可更改为其他形式
ll j(int n)
{
ll sum=1,i;
if(n==0) return 1;
else
{
for( i=n;i>1;i--)
sum=sum*i;
return sum;
}
}
ll c(int x,int y)//中学所学的组合数
{
return j(y)/(j(x)*j(y-x));
}
int main()
{
int h,i,j;
scanf("%d",&h);
for(i=1;i<=h;i++)
{
for(j=1;j<=i;j++)
printf("%.0f ",c(j-1,i-1));
putchar('\n');
}
return 0;
}
以下为正三角形图案样式
#include <stdio.h>
int main()
{
int s = 1, h; // 数值和高度
int i, j; // 循环计数
scanf("%d", &h); // 输入层数
for(i=1;i<=2*(h-1);i++)//为第一行的‘1’空出空格
putchar(' ');
printf("1\n"); // 输出第一个 1
for (i = 2; i <= h; s = 1, i++) // 行数 i 从 2 到层高
{
for(j=1;j<=2*(h-i);j++)//为每一行的‘1’前面空出空格
putchar(' ');
printf("1 "); // 第一个 1,每两个数字之间相隔三个单位空间
for (j = 1; j <= i - 2; j++)// 列位置 j 绕过第一个直接开始循环,即从i=3,j=1时从第三行开始输出每一行的第二项之后的数
{
s=(i-j)*s/j;//套用公式
printf("%d ", s);
}
printf("1\n"); // 最后一个 1,换行
}
//getchar(); // 暂停等待
return 0;
}
以上为本人所想到的方法,如有出错之处,请您立刻通知本人,本人将以感激的态度接受您的指正。