在屏幕上显示杨辉三角形
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
2)c(x,y)= c(x-1,y-1)+c(x-1,y) 这样便可以根据递归数学表达式来进行程序编写了。
【程序说明与注释】
1: #include <stdio.h>
2: #define WIDTH 4
3:
4: int c(int,int);
5:
6: int main(void)
7: {
8: int i,j,n=13;
9: printf("N=");
10:
11: /*控制输入正确的值以保证屏幕显示的图形正确*/
12: while(n>12) scanf("%d",&n);
13:
14: /*控制输出N行*/
15: for(i=0;i<=n;++i)
16: {
17: //every line
18: for(j=0;j<(12-i)/2*WIDTH;j++)
19: printf(" "); /*控制输出第i行前面的空格*/
20: for(j=1;j<i+2;j++)
21: printf("%4d",c(i,j)); /*输出第i行的第j个值*/
22: printf("\n");
23: }
24: system("PAUSE");
25: return 0;
26:
27: }
28:
29: int c(int x, int y)
30: {
31: int z;
32: if((y==1)||(y==x+1))
33: return 1;
34: z=c(x-1,y-1)+c(x-1,y);
35: return z;
36: }
37:
38:
输出结果
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
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
posted on 2010-09-04 22:27
sohu2000000 阅读(1354)
评论(0) 编辑 收藏 引用