打印本文 打印本文  关闭窗口 关闭窗口  
C趣味程序百例(03)杨辉三角形
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 13:59:19  文章录入:杜斌  责任编辑:杜斌

9.杨辉三角形
    在屏幕上显示杨辉三角形

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

*问题分析与算法设计
    杨辉三角形中的数,正是(x+y)的N次方幂展开式各项的系数。本题作为程序设计中具有代表性的题目,求解的方法很多,这里仅给出一种。
    从杨辉三角形的特点出发,可以总结出:
    1)第N行有N+1个值(设起始行为第0行)
    2)对于第N行的第J个值:(N>=2)
        当J=1或J=N+1时:其值为1
        J!=1且J!=N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值之和
    将这些特点提炼成数学公式可表示为:
                 1                          x=1或x=N+1
     c(x,y)= 
                 c(x-1,y-1)+c(x-1,y)        其它

    本程序应是根据以上递归的数学表达式编制的。
*程序说明与注释
#include<stdio.h>
void main()
{
    int i,j,n=13;
    printf("N=");
    while(n>12)
        scanf("%d",&n);     /*控制输入正确的值以保证屏幕显示的图形正确*/
    for(i=0;i<=n;i++)       /*控制输出N行*/
    {
        for(j-0;j<24-2*i;j++) printf(" ");  /*控制输出第i行前面的空格*/
        for(j=1;j<i+2;j++) printf("%4d",c(i,j));    /*输出第i行的第j个值*/
        printf("\n");
    }
}

void int c(int x,int y)     /*求杨辉三角形中第x行第y列的值*/
{
    int z;
    if((y==1)||(y==x+1))  return 1;  /*若为x行的第1或第x+1列,则输出1*/
    z=c(x-1,y-1)+c(x-1,y);          /*否则,其值为前一行中第y-1列与第y列值之和*/
    return z;
}
*运行结果
输入:N=12
输出:


*思考题
自行设计一种实现杨辉三角形的方法。
打印本文 打印本文  关闭窗口 关闭窗口