C语言如何实现打印杨辉三角(c语言,开发技术)

时间:2024-04-29 11:56:52 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

题目描述

打印杨辉三角(前N行)

问题分析

杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

C语言如何实现打印杨辉三角

杨辉三角的部分规律:

  1. 每个数等于它上方两数之和。

  2. 每行数字左右对称,由1开始逐渐变大。

  3. 第n行的数字有n项。

  4. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

根据前三个规律,我们可以使用数组法获取杨辉三角;根据后两个规律,我们可以使用公式法求出每行每列的数字。

数组法思路:先根据设定的行数定义一个二维数组,然后使用一个双层循环,外层循环的因数为杨辉三角的行数,内层循环用来将杨辉三角每行的数字存入数组。每行第一列和最后一列都是1,中间的数字等于它上方两数之和。

最后再通过两层循环将二维数组中的数字打印。

公式法思路:由于杨辉三角满足上面提到的第4点规律,所以我们可以直接定义一个函数求出杨辉三角第n行的m个数的值。

组合数公式

C语言如何实现打印杨辉三角

根据上面这个组合的公式,我们可以使用阶乘及相关计算,求出杨辉三角形的每个数,同时打印出来。

1. 使用数组法(打印直角三角)

打印直角形式的杨辉三角形,即打印二维数组时不加空格

代码

#include<stdio.h>#defineLINE_MAXIMUM10//行数intmain(){inti=0,j=0;intarray[LINE_MAXIMUM][LINE_MAXIMUM]={0};/*填充二维数组*/for(i=0;i<LINE_MAXIMUM;i++)//行数{for(j=0;j<=i;j++)//每行的列数(第n行的数字有n项){if(j==0||j==i)//每行第一列和最后一列为1array[i][j]=1;else//每个数等于它上方两数之和array[i][j]=array[i-1][j-1]\+array[i-1][j];}}/*打印杨辉三角(直角)*/for(i=0;i<LINE_MAXIMUM;i++){for(j=0;j<=i;j++)printf("%d",array[i][j]);printf("\n");}return0;}

运行结果

C语言如何实现打印杨辉三角

2. 使用数组法(打印等腰三角)

打印等腰形式的杨辉三角形,需要在每行前面加若干空格,空格的宽度需要根据数字的宽度调整,使三角形对称。

代码

#include<stdio.h>#defineLINE_MAXIMUM10//行数intmain(){inti=0,j=0;intarray[LINE_MAXIMUM][LINE_MAXIMUM]={0};intk=0;/*填充二维数组*/for(i=0;i<LINE_MAXIMUM;i++)//行数{for(j=0;j<=i;j++)//每行的列数(第n行的数字有n项){if(j==0||j==i)//每行第一列和最后一列为1array[i][j]=1;else//每个数等于它上方两数之和array[i][j]=array[i-1][j-1]\+array[i-1][j];}}/*打印杨辉三角(等腰)*/for(i=0;i<LINE_MAXIMUM;i++){//在数字前打印空格,最后一行空格数为0for(k=1;k<LINE_MAXIMUM-i;k++)printf("");for(j=0;j<=i;j++)printf("%3d",array[i][j]);printf("\n");}return0;}

运行结果

C语言如何实现打印杨辉三角

3. 使用公式法(打印等腰三角)

由于循环都是从 0 开始,所以核心函数的功能是获取杨辉三角第 m + 1 行,第 n + 1 个数的值(行数最小为1),即求C(m,n)。另外,由于公式中存在除法,所以行数列数及结果不能使用整型,需要用浮点型。

代码

#include<stdio.h>#defineLINE_MAXIMUM10//行数/***@brief获得阶乘结果(递归实现)*@paramnum输入的参数*@return返回num!(阶乘)*/floatGet_Factorial(floatnum){if(num>=1)returnnum*Get_Factorial(num-1);else//0!=1return1;}//获取杨辉三角第m+1行,第n+1个数的值为C(m,n)floatGet_Num(floatm,floatn){returnGet_Factorial(n)/Get_Factorial(m)/Get_Factorial(n-m);}intmain(){floati=0,j=0,k=0;/*打印杨辉三角(等腰)*/for(i=0;i<LINE_MAXIMUM;i++){//在数字前打印空格,最后一行空格数为0,第一行为空格数为LINE_MAXIMUM-1for(k=1;k<LINE_MAXIMUM-i;k++)printf("");for(j=0;j<=i;j++)printf("%3.0f",Get_Num(j,i));printf("\n");}return0;}

运行结果

C语言如何实现打印杨辉三角

网上参考

这份代码看起来很简洁,使用的是公式法。

#include<stdio.h>#include<stdlib.h>intmain(){ints=1,h;//数值和高度inti,j;//循环计数scanf("%d",&h);//输入层数printf("1\n");//输出第一个1for(i=2;i<=h;s=1,i++)//行数i从2到层高{printf("1");//第一个1for(j=1;j<=i-2;j++)//列位置j绕过第一个直接开始循环printf("%d",(s=(i-j)*s/j));printf("1\n");//最后一个1,换行}getchar();//暂停等待return0;}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:C语言如何实现打印杨辉三角的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MyBatis如何批量插入大量数据下一篇:

18 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18