C语言如何实现打印杨辉三角
导读:本文共2956字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 题目描述打印杨辉三角(前N行)问题分析杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角的部分规律:每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。第n行的数字有n项。第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元... ...
目录
(为您整理了一些要点),点击可以直达。题目描述
打印杨辉三角(前N行)
问题分析
杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
杨辉三角的部分规律:
每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
第n行的数字有n项。
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
根据前三个规律,我们可以使用数组法获取杨辉三角;根据后两个规律,我们可以使用公式法求出每行每列的数字。
数组法思路:先根据设定的行数定义一个二维数组,然后使用一个双层循环,外层循环的因数为杨辉三角的行数,内层循环用来将杨辉三角每行的数字存入数组。每行第一列和最后一列都是1,中间的数字等于它上方两数之和。
最后再通过两层循环将二维数组中的数字打印。
公式法思路:由于杨辉三角满足上面提到的第4点规律,所以我们可以直接定义一个函数求出杨辉三角第n行的m个数的值。
组合数公式
根据上面这个组合的公式,我们可以使用阶乘及相关计算,求出杨辉三角形的每个数,同时打印出来。
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;}
运行结果
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;}
运行结果
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;}
运行结果
网上参考
这份代码看起来很简洁,使用的是公式法。
#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语言如何实现打印杨辉三角的详细内容,希望对您有所帮助,信息来源于网络。