您的位置:首页 > 编程语言 > C语言/C++

C语言 程序 杨辉三角实现

2016-07-16 10:29 246 查看
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;

}

一个在努力中的未来程序员,如果有更好的想法,欢迎评论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 程序