周赛题目小结及分析(第二题:杨辉三角)

  大家好!这是第二题,一道很经典的题目,希望大家能通过这次的讲解能弄懂这一类的题目。

这是题目:

 

 在讲解倒三角之前,我来讲一下正常的杨辉三角应该怎么编写。

杨辉三角两侧的数字都是“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;
}

这个题就讲到的这里,大家有不懂的可以留言,我会尽我所能的解答大家,感谢大家的观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值