C语言打印杨辉三角
首先要有个基本思维,他不是每行的个数和行数是一样的吗,咱们要想到二维数组,int a[30][30],前一个框里代表行数,后一个代表每行最大可以输出数的个数
其实可以分为两部分来写
一,将最外面的1赋好值
就直接暴力写嵌套循环遍历每行的首位,然后赋值为1
#include<stdio.h>
int main (void)
{
//最终要输出的行数
int n;
//放值的数组
int a[30][30]={0};
int i,k;
//将首位的值赋值为1
for(i=0;i<n;i++)
{
a[i][0]=1;
a[i][i]=1;
}
return 0;
}
二,剩下的就是往里面的数里面赋值
通过观察可以得到,数等于上面数的值加上面那个数左边的数的值
所以可以用这种方法赋值
//将中间的值赋值
for(i=2;i<n;i++)
{
//因为不用到最后一个i就是最后一个所以不用等于i,直接k<i;
for(k=1;k<i;k++)
{
a[i][k]=a[i-1][k]+a[i-1][k-1];
}
}
三,前两部分组合
#include<stdio.h>
int main (void)
{
//没啥好说的,输出的行数
int n;
scanf("%d",&n);
int a[30][30]={0};
int i,k;
for(i=0;i<n;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<n;i++)
{
for(k=1;k<i;k++)
{
a[i][k]=a[i-1][k]+a[i-1][k-1];
}
}
//符合格式变成这样输出
for(i=0;i<n;i++)
{
for(k=0;k<=i;k++)
{
printf("%d ",a[i][k]);
}
//符合格式
printf("\n");
}
return 0;
}
输出样式:
还可以继续优化输出样式
上面相同
for(i=0;i<n;i++)
{
//核心,就是通过最后一行有几个数字来加几个空格
b = n - i;
while (b--)
{
printf(" ");
}
for(k=0;k<=i;k++)
{
printf("%d ",a[i][k]);
}
//符合格式
if(i!=n-1)
printf("\n");
}
//输出变成这样