打印给定行数的杨辉三角

259 阅读2分钟

1 题目

功能:打印杨辉三角

描述:打印给定行数的杨辉三角

2 思路

杨辉三角形

又称帕斯卡三角形、贾宪三角形、海亚姆三角形、巴斯卡三角形,是二项式系数的一种写法,形似三角形,在中国首现于南宋杨辉的《详解九章算法》得名,书中杨辉说明是引自贾宪的《释锁算书》,故又名贾宪三角形。

最基本的几个性质

每个数等于它上方两数之和 每行数字左右对称,由1开始逐渐变大 第n行的数字有n项 前n行共[(1+n)n]/2 个数

举例

打印出前 9 行的数字

                                1
                             1     1
                          1     2     1
                       1     3     3     1
                    1     4     6     4     1
                 1     5    10    10     5     1
              1     6    15    20    15     6     1
           1     7    21    35    35    21     7     1
        1     8    28    56    70    56    28     8     1

3 代码

#include <stdio.h>
#define N 15

/**
功能:打印杨辉三角
描述:打印给定行数的杨辉三角
**/

int main(int argc, char const *argv[]) {

    int i, j, k, n, a[N][N];
    while(1) {
    	printf("请输入要打印的行数[范围在1~15之间]:"); // 控制在 15 行之内
    	scanf("%d",&n);
	    if (n>=1 && n<=15){  				
	        break;
	    } else {
	    	printf("输入的行数不在规定范围内!\n");
	    	continue;
	    }	
    }

    printf("%d行杨辉三角打印如下:\n",n);
    for(i=1; i<=n; i++)
        a[i][1] = a[i][i] = 1;   			
    for(i=3; i<=n; i++)
        for(j=2; j<=i-1; j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(i=1; i<=n; i++){
        for(k=1; k<=n-i; k++)
            printf("   ");   				
        for(j=1; j<=i; j++)  				
            printf("%6d",a[i][j]);
        printf("\n");   					
    }
    printf("\n");
}

示例结果:

请输入要打印的行数[范围在1~15之间]:20
输入的行数不在规定范围内!
请输入要打印的行数[范围在1~15之间]:30
输入的行数不在规定范围内!
请输入要打印的行数[范围在1~15之间]:10
10行杨辉三角打印如下:
                                1
                             1     1
                          1     2     1
                       1     3     3     1
                    1     4     6     4     1
                 1     5    10    10     5     1
              1     6    15    20    15     6     1
           1     7    21    35    35    21     7     1
        1     8    28    56    70    56    28     8     1
     1     9    36    84   126   126    84    36     9     1