实验7-2-6-二维数组 打印杨辉三角

NEKO_coffee NEKO_coffee 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

本题要求按照规定格式打印前N行杨辉三角。

输入格式:

输入在一行中给出N(1≤N≤10)。

输出格式:

以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。

输入样例:

6

输出样例:

        1
       1   1
      1   2   1
     1   3   3   1
    1   4   6   4   1
   1   5  10  10   5   1

对于这一题,初见可能会吓一跳,来来回回数着空格的多少,忘却了本质上题目的思考 

依托题干,可以得知本题运用二维数组来求解

但是!问题来了,这玩意长得也不像个方阵啊?而且上下两行中间隔着若干个空格?这可咋整?

别急~你先别急

 我们不妨先不管空格,把它左对齐

1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5  10  10   5   1

诶?你发现了什么?我们不妨手再贱一点

1   0   0   0   0   0
1   1   0   0   0   0
1   2   1   0   0   0
1   3   3   1   0   0
1   4   6   4   1   0
1   5  10 10  5   1

这玩意是不是就长得像二维数组了?

我们再思考一下数组中元素的关系我们不难看出一个公式

a [h] [l] = a [h-1] [l-1] + a [h-1] [l] ;    (h,j>=1)

  h,j为行和列的简写

还是没看懂?

 在这里,根据这张图,我们可以得出上述普遍结论了a [h] [l] = a [h-1] [l-1] + a [h-1] [l] ;    (h,j>=1)

即该位置的数由它的上边那个加上它左上角的那个

那么我们怎么算出各个位置上的数呢?总不能一个个手打吧?

我们不妨先利用原神高等元素论必修一当中的知识点把整个矩阵的所有元素全部初始化为0,然后再初始化第一列元素为1

再利用上述公式将剩下的数补全

但是!!!!!!!!!我们发现题目的输出不仅有很多byd空格,还没有输出byd0

这就对我们的格式化输出功底有所考察了

运用我们练习的功底,避免毕业直接上工地!

先解决不输出0的问题,然后再解决空格问题

直接上程序!

#include <stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[n][n];
    for(int h=0;h<n;h++)
        for(int l=0;l<n;l++)
            a[h][l]=0;                         //初始化byd0

    for(int h=0;h<n;h++)
        a[h][0]=1;                             //初始化第一列byd1
    
    
    for(int h=1;h<n;h++)
        for(int l=1;l<n;l++)
            a[h][l]=a[h-1][l-1]+a[h-1][l];     //补全byd杨辉三角

int k=n-1;
    for(int h=0;h<n;h++){
        for(int i=0;i<n-(n-k);i++)
            printf(" ");                       //输出byd空格
        for(int l=0;l<n-k;l++){                //输出byd数字
            printf("%4d",a[h][l]);
            if(k<0)
                break;
        }
        k--;
        printf("\n");
    }
}

稳啦!!!

...全文
评论 4
收藏 已收藏
分享
返回顶部