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 <stdio.h>
/* 求杨辉三角形中第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<i+2;j++)printf("%6d",c(i,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
网友评论