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>
int triangle(int i,int j)
{
if(j == 1 || j == i + 1)
{
return 1;
}
return triangle(i – 1,j – 1) + triangle(i – 1,j);
}
int main()
{
int i;
int j;
int n;
printf(“please input the line:\n”);
scanf(“%d”,&n);
for(i = 0;i <= n;i++)
{
for(j = 1;j <= i + 1;j++)
{
printf(“%d “,triangle(i,j));
}
printf(“\n”);
}
return 0;
}
*思考题
自行设计一种实现杨辉三角形的方法
可以利用公式。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int s = 1;
int h; // 数值和高度
int i;
int j; // 循环计数
scanf(“%d”, &h); // 输入层数
printf(“1\n”); // 输出第一个 1
for (i = 2; i <= h; s = 1, i++) // 行数 i 从 2 到层高
{
printf(“1 “); // 第一个 1
for (j = 1; j <= i – 2; j++) // 列位置 j 绕过第一个直接开始循环
{
//printf(“%d “, (s = (i – j) / j * s));
printf(“%d “, (s = (i – j) * s / j));
}
printf(“1\n”); // 最后一个 1,换行
}
getchar(); // 暂停等待
return 0;
}
一个在努力中的未来程序员,如果有更好的想法,欢迎评论。