C语言如何输出杨辉三角的前n行

为什么不输出最外边(右上一条)的的1啊?
题目:输入一个不大于10的正整数n,生成并输出杨辉三角的前n行,每个数占5列。


```c
#include<stdio.h>
main()
{int a[10][10],i,j,n;
 scanf("%d",&n);
    for(i=0;i<n;i++)
       {a[i][0]=1;
        a[i][i]=1;}
    for(i=2;i<n;i++)
        for(j=0;j<i;j++)
            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("%5d",a[i][j]);
             printf("\n");
        }
}

```

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n,i,j;
    scanf("%d",&n);
    int a[n][n];
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if(i==j||j==0){
                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<n;j++){
            if(j<=i){
                printf("%d ",a[i][j]);
             }
        }
        printf("\n");
    }
 
    return 0;
}

修改内层循环的起始值,从 0 改为 1。同时,循环条件也做了相应改变,从 j < i 改为 j <= i,以保证每行最后一个数也能被计算到。打印杨辉三角时,在内层循环中将循环条件修改为 j <= i,保证每行的所有数都能被打印出来。同时,在数值前加上 %5d,使其左对齐且占据 5 个字符的宽度。

img

#include <stdio.h>

int main() {
    int a[10][10], i, j, n;
    printf("请输入需要打印杨辉三角的行数:");
    scanf("%d", &n);

    for (i = 0; i < n; i++) {
        a[i][0] = 1;
        a[i][i] = 1;
    }

    for (i = 2; i < n; i++) {
        for (j = 1; j < i; j++) {
            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("%5d", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7399912
  • 这篇博客你也可以参考下:C语言 求一个数列的前n项之和,保留两位小数。
  • 除此之外, 这篇博客: C语言输出杨辉三角前n行(低时间复杂度)中的 杨辉三角定义 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    杨辉三角,是二项式系数在三角形中的一种几何排列,初中的时候我们学过它的每一个数都是上一行两个数之和,如图
    在这里插入图片描述

  • 以下回答来自chatgpt:

    答案:

    在杨辉三角中,最右边的1实际上是从下一行的第二个数组成的,所以我们需要在输出每行末尾多输出一个1即可。

    具体的代码实现如下:

    for (int i = 0; i < n; i++) { int c = 1;//初始化每行的第一个数 for (int j = 0; j <= i; j++) { printf("%d ", c); c = c * (i - j) / (j + 1);//计算下一个数 } printf("1");//多输出一个1 printf("\n");//换行 }

    完整的代码如下:

    include

    int main() { int n; printf("请输入要输出的行数: "); scanf("%d", &n);

    for (int i = 0; i < n; i++)
    {
        int c = 1;//初始化每行的第一个数
        for (int j = 0; j <= i; j++)
        {
            printf("%d ", c);
            c = c * (i - j) / (j + 1);//计算下一个数
        }
        printf("1");//多输出一个1
        printf("\n");//换行
    }
    
    return 0;
    

    }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^