打印杨辉三角形

题目:

输入一个正整数n,实现打印n行的杨辉三角形。例如下图:

解题思路:

观察杨辉三角形的规律,从下图来找杨辉三角形的规律要容易一些:

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

 题目中要求的杨辉三角,不过是上图中每行控制一下输出数字前的输出空格个数来实现的。观察上图,可以很清楚的发现规律,如果以一个二维数组来存储杨辉三角,那么当列标为0时或者行标与列标相等时值为1。当不满足前面条件时,值大小符合a[i][j] = a[i-1][j] + a[i-1][j-1],即等于它正上方和左上方的两个数字相加。从整体输出来看,只有在列号小于等于行号时才输出数组的值。

每行输出空格的数目确定,我主要是根据该数对其的最下面的数的左面空格和数的总数来决定的,如将要输出10行的杨辉三角,那么第一行左侧空格和数加起来有9个,我输出18个空格,第二行左侧空格和数加起来有8个,我输出16个空格。这样的杨辉三角形比较接近等边三角形。

程序代码:

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    int n;
    int i,j,k;
    int a[100][100];
    printf("你想输出几行的杨辉三角形:");
    scanf("%d",&n);
    for(i = 0; i < n; i++){//控制行
        for(k = (n-i-1)*2; k >0; k--){//输出空格
            putchar(' ');
        }
        for(j = 0; j <= i; j++){//控制列
            if(i == j || j == 0){
                a[i][j] = 1;
                printf("%5d",a[i][j]);//保证数字间的空间
            }
            else{
                a[i][j] = a[i-1][j] + a[i-1][j-1];
                printf("%5d",a[i][j]);
            }
        }
        putchar('\n');
    }

    return 0;
} 

运行结果:

你想输出几行的杨辉三角形: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值