C语言 程序 杨辉三角实现

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;
}

一个在努力中的未来程序员,如果有更好的想法,欢迎评论。

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/insanity666/article/details/51923057
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞