C语言 | 杨辉三角形

C语言 | 杨辉三角形

在屏幕上显示杨辉三角形:

问题分析与算法设计

杨辉三角问题,正是(x + y)的N次方幂展开式中各项的系数。本题是程序设计总具有代表性的问题,求解的方法很多,这里给出其中一种。

从杨辉三角形的特点出发,可以总结出:

第N行有N+1个值(设起始行为第0行);

对于第N行的第J个数的值:(N  >= 2)

当J=1或J=N+1时:其值为1;

当J != 1且J != N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值之和;

将这些特点提炼成数学公式可表示为:

$$

c(x,y)= \begin{cases} 1, & \text {$x$ = 1 或 $x$ = N + 1} \\ c(x-1, y-1) + c(x-1, y), & \text{其他} \end{cases}

$$

本程序就是根据以上递归的数学表达式编写的。

程序设计与说明

/*******************************************************************

*   > File Name: YangHuiTriangle.c

*   > Author: fly

*   > Create Time: 2021-06-16  3/24  12:44:28 +0800

*================================================================*/

#include

/* 求杨辉三角形中第x行第y列的值 */

intc(intx,inty)

{

intz;

/* 若为X行的第1或者第x+1列,则输出1 */

if((y==1)||(y==x+1))return(1);

/* 否则,其值为前1行中的第y-1列与第y列值之和 */

z=c(x-1,y-1)+c(x-1,y);

return(z);

}

intmain(intargc,char*argv[])

{

inti,j,n=13;

printf("N = ");

while(n>12)

scanf("%d",&n);

/* 输出n行 */

for(i=0;i<=n;i++)

   {

/* 控制输出第i行前面的空格 */

for(j=0;j<12-i;j++)printf("   ");

/* 输出第i行的第j个值 */

for(j=1;j

printf("\n");

   }

return0;

}

编译、运行

[fly@fly-vmsource]$ makeYangHuiTriangle

gcc-oYangHuiTriangle YangHuiTriangle.c-g-Wall

[fly@fly-vmsource]$ ./YangHuiTriangle

N=12

1

11

121

1331

14641

15101051

1615201561

172135352171

18285670562881

193684126126843691

1104512021025221012045101

1115516533046246233016555111

1126622049579292479249522066121

你可能感兴趣的:(C语言 | 杨辉三角形)