思路在于对规律的寻找,可以看出,第一行的每个元素都是(j * j+ j)/2,的到的,那第二行就是第一行去掉第一个元素然后-1,就对应到了第二行,第三行就是第一行去掉前两个元素-2,就得到了第三行,如何控制去掉第一个还是第二个呢?我们可以定义一个变量c,让j+c元素向后偏移,初始为0,每结束一行就++c。这样就可以了。

#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[n][n];
    int c = 0;
    for(int i =1;i<=n;i++)
    {
        for(int j =1;j<=n-i+1;j++)
        {
            printf("%d ",((j+c)*(j+c)+j+c)/2-c);
        }
        c++;
        printf("\n");
    }
    
    return 0;
}