大家好!这是第二题,一道很经典的题目,希望大家能通过这次的讲解能弄懂这一类的题目。
这是题目:
在讲解倒三角之前,我来讲一下正常的杨辉三角应该怎么编写。
杨辉三角两侧的数字都是“1”,后面的数都是由上面一排的两个数相加得到的,那么,知道原理后,程序也就好写了。
首先看一下正杨辉三角的写法:
#include<stdio.h>
int main()
{
int n,i,j;
int a[11][11]={0};
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=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");
}
printf("\n");
return 0;
}
这里只定义了11,如果想写更多行,就改变数组a里面的个数就好。
这里a[i][j]=a[i-1][j]+a[i-1][j-1],这里的“i”和“j”分别代表的是行和列,两数相加便能得到一个新的数。
运行出来的效果就是:
1
11
121
1331
14641
.........
这是不加空格的情况,如果想要更加美观,可以加入空格,这里是代码:
#include<stdio.h>
int main()
{
int n,i,j,k;
int a[11][11]={0};
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(i=0;i<=n;i++)
{
for(k=0;k<n-i;k++)
printf(" ");
for(j=0;j<=i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
这样就可以输出一个漂亮的杨辉三角了,让我们来看看效果吧:
1
1 1
1 2 1
1 3 3 1
................
大概的效果的就是这样的,大家自己尝试一下吧,我相信你也可以的。
好了,接下来就是倒三角了,这里可能有一点变化,但也不难理解,只用将最后一行的数放到第一行输出就好。上代码:
#include<stdio.h>
int main()
{
int n,i,j,k;
int a[11][11]={0};
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=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(" ");//这里不难理解,大家仔细对照,就可以发现,两个循环只是对调了一下位置。
for(k=0;k<n-i;k++){
printf("%d ",a[n-i-1][k]);//这里还有另外一种写法,就是k--,也是可以的,大家可以试试
}
printf("\n");
}
printf("\n");
return 0;
}
这个题就讲到的这里,大家有不懂的可以留言,我会尽我所能的解答大家,感谢大家的观看!